JSF ajax 命令按钮不更新 primefaces 选择列表

发布于 2024-12-28 01:48:32 字数 754 浏览 0 评论 0原文

代码如下:

<h:form id="articleForm" >
    <p:commandButton value="Select tags" ajax="true" >
        <f:ajax execute="@form" render="@form :articleForm:tags" />
    </p:commandButton>

    <p:pickList id="tags" value="#{articleController.dualListModelForTags}" var="tag" itemLabel="#{tag.tag}" itemValue="#{tag}" converter="distinctTagConverter">
        <f:facet name="sourceCaption">Distinct tags</f:facet>  
        <f:facet name="targetCaption">Connected tags</f:facet>
    </p:pickList>
</h:form>

当单击命令按钮时,将调用并执行支持 bean 中的 getDualListModelForTags()。在 getDualListModelForTags() 中,我做了一些修改,因此我希望更新选项列表。但 picklist(id=tags) 不会再次呈现。仅当我刷新页面时,才会对选项列表进行修改。

This is the code:

<h:form id="articleForm" >
    <p:commandButton value="Select tags" ajax="true" >
        <f:ajax execute="@form" render="@form :articleForm:tags" />
    </p:commandButton>

    <p:pickList id="tags" value="#{articleController.dualListModelForTags}" var="tag" itemLabel="#{tag.tag}" itemValue="#{tag}" converter="distinctTagConverter">
        <f:facet name="sourceCaption">Distinct tags</f:facet>  
        <f:facet name="targetCaption">Connected tags</f:facet>
    </p:pickList>
</h:form>

When the commandbutton is clicked, the getDualListModelForTags() in the backing bean is called and executed. In getDualListModelForTags() I make some modifications so I want the picklist to be updated. But the picklist(id=tags) is not rendered again. Only when I refresh the page, are the modifications made to the picklist.

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

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

发布评论

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

评论(1

自由如风 2025-01-04 01:48:32

PrimeFaces 组件不能与 一起使用。您需要改用按钮自己的 ajax 目标属性。您应该使用 而不是 。但这已经默认为@form,所以你可以省略它。您应该使用 ,而不是 。无需指定已被 @form 覆盖的客户端 ID,因此只需 @form 就足够了。此外,ajax="true" 属性也是不必要的,因为这已经是默认值。

因此,这应该可以:

<p:commandButton value="Select tags" update="@form" />

与具体问题无关,您正在 getter 方法中完成业务工作。这是一个坏主意。请改为在按钮的 action 方法中执行此操作。您似乎还使用会话范围 bean 来查看范围数据。这是一个坏主意。而是将 bean 放入视图范围中。

The PrimeFaces <p:commandButton> component doesn't work together with <f:ajax>. You need to use the button's own ajax-targeted attributes instead. Instead of the <f:ajax execute> you should use <p:commandButton process>. But this already defaults to @form, so you can omit it. Instead of the <f:ajax render> you should use <p:commandButton update>. Specifying client IDs which are already covered by @form is unnecessary, so just @form is sufficient. Also the ajax="true" attribute is unnecessary as that's the default already.

So just this should do:

<p:commandButton value="Select tags" update="@form" />

Unrelated to the concrete problem, you're doing the business job inside a getter method. This is a bad idea. Do it in the button's action method instead. You also seem to be using a session scoped bean for view scoped data. This is a bad idea. Put the bean in the view scope instead.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文