将参数传递给a4j:ajax

时间:2014-01-02 15:30:41

标签: jsf-2 richfaces jsf-1.2

我们正在从jsf 1.2升级到jsf 2。 我们正在使用apache myfaces 2.1和富面4.3。

以下是xhtml代码:

迁移之前:

<h:selectBooleanCheckbox id="comp1" value="#{bean.select}">
                        <a4j:support event="onclick" ajaxSingle="true" actionListener="#{bean.processInput}" reRender="compId">
                                <f:param name="name" value="paramValue"/>
                            </a4j:support>  
</h:selectBooleanCheckbox>

我们传递一个参数并在actionListener方法中接受参数:(String)context.getExternalContext().getRequestParameterMap().get("name1");

迁移后:

<h:selectBooleanCheckbox id="comp1" value="#{bean.select}">
                <a4j:ajax event="click" listener="#{bean.processInput}" execute="@this" render="compId"/>                  
</h:selectBooleanCheckbox>

我想将参数传递给bean.processInput方法,该方法具有以下签名:

public void processInput(AjaxBehaviorEvent event){

根据这篇文章Issues in passing parameter in f:ajax,我们无法使用<f:param>(它不起作用 另外)我们没有使用EL 2.2来排除方法签名中的传递参数。

由于我们不能使用context.getApplication()。evaluateExpressionGet由于我们的xhtml页面中的约束只有选项可用 使用<a4j:param name="" value="" assignTo=""/>. 但是这需要在bean中定义一个需要代码更改的变量。

所以我的问题是我们可以在第二种情况下将参数从UI传递给侦听器而不需要更改代码。

2 个答案:

答案 0 :(得分:5)

您可以像这样使用f:attribute

<h:selectBooleanCheckbox id="comp1" value="#{bean.select}">
    <a4j:ajax event="click" listener="#{bean.processInput}" execute="@this" render="compId"/>              
    <f:attribute name="name" value="paramValue" /> 
</h:selectBooleanCheckbox>

并在你的bean中使用它:

public void processInput(AjaxBehaviorEvent event)
{
    System.out.println(event.getComponent().getAttributes().get("name"));
}

答案 1 :(得分:0)

确保f:attribute组件不是a4j:ajax的子组件。 它应该是h:selectBooleanCheckBox的直接子组件,如果不是侦听器则不会触发。