Primefaces selectOneMenu在firefox中刷新页面后更改值

时间:2017-01-30 08:01:01

标签: primefaces jsf-2 selectonemenu

我正在使用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"/>

5 个答案:

答案 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"/>