JSF RichFaces A4J:支持迁移到A4J:AJAX [英] Jsf RichFaces a4j:support migration to a4j:ajax

查看:66
本文介绍了JSF RichFaces A4J:支持迁移到A4J:AJAX的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法将此代码从 JSF 1.2 应用程序转换为 JSF 2.x 应用程序中的等效代码

I have problem with converting this code from JSF 1.2 application to equivalent in JSF 2.x application

<h:selectOneMenu id="type" value="#{bean.type}">
    <f:selectItems value="#{bean.typeList}"/>
    <a4j:support event="onchange"
                 ajaxSingle="false"
                 immediate="true"
                 reRender="myForm">
        <a4j:actionparam name="type" 
                         value="this.value" 
                         assignTo="#{bean.type}" 
                         noEscape="true"/>
    </a4j:support>
</h:selectOneMenu>

此代码段的工作方式.

根据在#{bean.type} 中选择的值,我的页面显示不同的字段.当用户更改"type" 字段时,将重新呈现整个表单,但不进行表单验证( ajaxSingle ="false",instant ="true",reRender ="myForm" )

Depending on selected value in #{bean.type}, my page display different fields. When User change "type" field the whole form is rerendered, but without form validation (ajaxSingle="false", immediate="true", reRender="myForm").

我不想在这里验证filds,我只想将新值设置为#{bean.type} 并重新渲染页面以显示不同的字段(取决于#{bean.type} ).这就是为什么我需要在 a4j:actionparam 内手动设置#{bean.type} 的原因.

I don't want to validate filds here, I just want to set new value to the #{bean.type} and rerender the page in order to show different fields (depending on #{bean.type}). Thats why i need to manualy set #{bean.type} inside a4j:actionparam.

此代码的一个不错的功能是,其他字段中的提交值在重新呈现后会保留下来.

The nice feature about this code is that submited values in other fileds are preserved after rerendering.

我正在尝试在 JSF 2.x 中执行相同的操作,但未成功:

I am trying to do the same thing in JSF 2.x with no success:

<h:selectOneMenu iid="type" value="#{bean.type}">
    <f:selectItems value="#{bean.typeList}"/>
    <a4j:ajax event="valueChange" render="@form" execute="@this"/>
</h:selectOneMenu>

此:

<a4j:ajax event="valueChange" render="@form" execute="@this"/>

将重新提交整个表格,而我将从其他字段中丢失提交的值

will rerender whole form and I will lose submited values form other fields

此:

<a4j:ajax event="valueChange" render="@form" execute="@form"/>

将提交,验证和重新提交整个表单(我想像 JSF 1.2 一样提交未经验证的邮件)

will submit, validate and rerender whole form (i want just submit without validation like in JSF 1.2)

此:

<a4j:ajax event="valueChange" render="@form" execute="@form" immediate="true"/>

也不起作用(与上述相同)

also does not work (work same as above)

所以我的问题是如何在 JSF 2.x 中实现相同的行为?

So my question is how can I achive the same behavior in JSF 2.x ?

谢谢

推荐答案

感谢Andrey评论,我找到了解决方法:

Thanks to Andrey comment I found solution:

<h:selectOneMenu id="type"
                 value="#{bean.type}"
                 valueChangeListener="#{bean.typeChangeListener}"
                 immediate="true">
    <f:selectItems value="#{bean.typeList}"/>
    <a4j:ajax execute="@form" render="@form" listener="#{facesContext.renderResponse}" immediate="true"/>
</h:selectOneMenu>

和:

public void typeChangeListener(ValueChangeEvent event) {
  type = (String) event.getNewValue();
}

在a4j:ajax上立即执行会导致在应用请求值阶段期间调用listener =#{facesContext.renderResponse}",并且renderResponse跳过验证.

immediate on a4j:ajax causes that listener="#{facesContext.renderResponse}" is called during apply request values phase, and renderResponse skips validation.

在h:selectOneMenu上立即执行将导致在应用请求值阶段也调用valueChangeListener.

immediate on h:selectOneMenu causes that valueChangeListener is also called during apply request values phase.

因此,我可以提交整个表单而无需进行验证,设置类型,根据更改的类型重新呈现新字段以及将提交的值保留在其他文件中.

So I can submit whole form without validation, set type, rerender new fields based on changed type, and preserve submited values in other fileds.

这篇关于JSF RichFaces A4J:支持迁移到A4J:AJAX的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆