将参数传递给 a4j:ajax 方法

发布于 2024-12-06 22:04:07 字数 709 浏览 0 评论 0原文

我正在尝试使用 为方法提供刚刚在表单上输入的值;

<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 并重新绘制表单

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

I am trying to use <a4j:ajax> to feed a method with a value just entered on the form;

<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>

Color on the form is selected correctly;

my problem is that when I pass colorClass.color as part of the execute, it is blank;
if I replace colorClass.color with a literal

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

the method is called, finds the colorCode and repaints the form

How can I "grab" the value just entered so that I can pass it as a parameter to the method?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

任谁 2024-12-13 22:04:07

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

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

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

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

You need listener attribute instead of execute attribute. The execute attribute should point to a collection of client IDs which are to be submitted (which defaults to @this in <f:ajax> and @form in <a4j:ajax>). However in your particular case it returns void and keeps the execute empty. The listener attribute is supposed to point to a bean action listener method. Fix it accordingly:

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

Note that the colorClass argument seems superfluous here, or at least the colorClass.color as you could also just do colorClass.getColor() inside the getColorCode() method. Just passing one of them ought to be sufficient. Passing colorClass.color would be preferable so that your myChoices bean is not tight coupled with the colorCode bean.

<a4j:ajax event="change" render="colorCode" 
    listener="#{myChoices.getColorCode(colorClass.color)}"/>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文