【问题标题】:Passing parameters to a4j:ajax method将参数传递给 a4j:ajax 方法
【发布时间】:2011-09-28 19:21:43
【问题描述】:

我正在尝试使用<a4j:ajax> 为方法提供刚刚在表单中输入的值;

<h:selectOneMenu id="aa" value="#{colorClass.color}">
    <f:selectItems value="#{myChoices.colorOptions}"/>
    <a4j:ajax event="change" render="colorCode" 
        execute="#{myChoices.getColorCode(colorClass,colorClass.color)}"/>
</selectOneMenu>

表格颜色选择正确;

我的问题是当我将colorClass.color 作为执行的一部分传递时,它是空白的; 如果我用文字替换colorClass.color

<a4j:ajax event="change" render="colorCode" 
    execute="#{myChoices.getColorCode(colorClass,'green')}"/>

方法被调用,找到colorCode并重新绘制表单

如何“获取”刚刚输入的值,以便将其作为参数传递给方法?

【问题讨论】:

    标签: jsf jsf-2 ajax4jsf


    【解决方案1】:

    您需要listener 属性而不是execute 属性。 execute 属性应指向要提交的客户端 ID 的集合(在 &lt;f:ajax&gt; 中默认为 @this,在 &lt;a4j:ajax&gt; 中默认为 @form)。但是,在您的特定情况下,它会返回 void 并将 execute 保持为空。 listener 属性应该指向一个 bean 动作监听器方法。相应地修复它:

    <a4j:ajax event="change" render="colorCode" 
        listener="#{myChoices.getColorCode(colorClass,colorClass.color)}"/>
    

    请注意,colorClass 参数在这里似乎是多余的,或者至少是 colorClass.color,因为您也可以在 getColorCode() 方法中使用 colorClass.getColor()。只要通过其中一个就足够了。传递colorClass.color 会更好,这样您的myChoices bean 不会与colorCode bean 紧密耦合。

    <a4j:ajax event="change" render="colorCode" 
        listener="#{myChoices.getColorCode(colorClass.color)}"/>
    

    【讨论】:

    • 非常感谢,成功了!
    猜你喜欢
    • 2014-01-20
    • 1970-01-01
    • 2011-07-23
    • 2017-01-05
    • 2013-10-04
    • 2013-05-19
    • 2013-02-08
    • 2021-07-19
    • 1970-01-01
    相关资源
    最近更新 更多