将参数传递给a4j:ajax

Atu*_*tul 1 richfaces jsf-2 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>
Run Code Online (Sandbox Code Playgroud)

我们传递一个参数,并在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>
Run Code Online (Sandbox Code Playgroud)

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

public void processInput(AjaxBehaviorEvent event){
Run Code Online (Sandbox Code Playgroud)

根据这篇文章 - 在f:ajax中传递参数的问题,我们不能使用<f:param>(它也不工作),我们没有使用EL 2.2来排除方法签名中的传递参数.

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

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

Ale*_*oie 6

你可以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>
Run Code Online (Sandbox Code Playgroud)

并在你的bean中使用它:

public void processInput(AjaxBehaviorEvent event)
{
    System.out.println(event.getComponent().getAttributes().get("name"));
}
Run Code Online (Sandbox Code Playgroud)