我正在使用PrimeFaces SelectOneMenu和更改事件调用。 当我更改它的值时,change方法调用并设置一些参数。当我刷新页面时,在bean端,所选值更改为默认值,但在UI中,显示更改的值。因此,当用户单击提交时,setter方法会更改值,但更改方法不会调用。 这是UI代码:
<p:selectOneMenu value="#{bean.selectedType}">
<f:selectItems value="#{bean.types}"/>
<p:ajax event="change" listener="#{bean.changeType}" update=":form"/>
</p:selectOneMenu>
<p:commandButton actionListener="#{bean.changeType}" update=":form"/>
答案 0 :(得分:2)
我用remoteCommand组件解决了这个问题,在刷新页面后更新selectOneMenu。不要忘记在@PostConstruct方法中将选定变量设置为null。
问题仅出现在Firefox浏览器上。
代码:
<p:remoteCommand name="rcName"
update="@form"
autoRun="true"
ignoreAutoUpdate="true" />code
答案 1 :(得分:0)
检查您的bean是否为@RequestScoped
。如果是,请将其更改为@ViewScoped
。
答案 2 :(得分:0)
您是否尝试将process="@this"
放入ajax组件?
答案 3 :(得分:0)
我最近遇到了同样的问题,并且能够通过向HTTP-Header添加显式的无缓存指令来解决它。
e.g。实现javax.servlet.Filter类并执行类似
的操作 HttpServletResponse httpServletResponse = (HttpServletResponse) response;
httpServletResponse.setHeader("Cache-Control", "no-cache, no-store,
must-revalidate"); // HTTP 1.1.
httpServletResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0.
httpServletResponse.setDateHeader("Expires", 0); // Proxies.
在doFilter()方法中。
然后将您的过滤器类应用于您要在web.xml中过滤的页面
答案 4 :(得分:0)
对我来说,这是通过https://www.logicbig.com/tutorials/misc/primefaces/select-one-menu-with-ajax.html
中的示例解决的关键是ajax change
事件没有得到很好的支持(它似乎不会触发update
)。相反,使用itemSelect
对我来说完全解决了这个问题。
<p:ajax event="itemSelect" update="@all"/>