Firefox 页面刷新后 Primefaces selectOneMenu 更改值
Primefaces selectOneMenu changes value after page refresh in firefox
我正在使用带有更改事件调用的 PrimeFaces SelectOneMenu。
当我更改它的值时,更改方法会调用并设置一些参数。当我刷新页面时,在 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"/>
检查您的 bean 是否为 @RequestScoped
。如果是这样,将其更改为 @ViewScoped
.
您是否尝试将 process="@this"
放入 ajax 组件中?
我用remoteCommand组件解决了这个问题,在页面刷新后更新selectOneMenu。不要忘记在 @PostConstruct 方法中将所选变量设置为 null。
该问题仅在 Firefox 浏览器上出现。
代码:
<p:remoteCommand name="rcName"
update="@form"
autoRun="true"
ignoreAutoUpdate="true" />code
我最近遇到了同样的问题,并且能够通过向 HTTP-Header.
添加显式 no-cache 指令来解决它
例如实施 javax.servlet.Filter class 并执行类似
的操作
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() 方法中。
然后只需将 filter-class 应用到您要在 web.xml
中过滤的页面
对我来说,这是通过 https://www.logicbig.com/tutorials/misc/primefaces/select-one-menu-with-ajax.html
中的示例解决的
关键是 ajax change
事件没有得到很好的支持(它似乎没有触发 update
)。使用 itemSelect
而不是完全解决了这个问题。
<p:ajax event="itemSelect" update="@all"/>
我正在使用带有更改事件调用的 PrimeFaces SelectOneMenu。 当我更改它的值时,更改方法会调用并设置一些参数。当我刷新页面时,在 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"/>
检查您的 bean 是否为 @RequestScoped
。如果是这样,将其更改为 @ViewScoped
.
您是否尝试将 process="@this"
放入 ajax 组件中?
我用remoteCommand组件解决了这个问题,在页面刷新后更新selectOneMenu。不要忘记在 @PostConstruct 方法中将所选变量设置为 null。
该问题仅在 Firefox 浏览器上出现。
代码:
<p:remoteCommand name="rcName"
update="@form"
autoRun="true"
ignoreAutoUpdate="true" />code
我最近遇到了同样的问题,并且能够通过向 HTTP-Header.
添加显式 no-cache 指令来解决它例如实施 javax.servlet.Filter class 并执行类似
的操作 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() 方法中。
然后只需将 filter-class 应用到您要在 web.xml
中过滤的页面对我来说,这是通过 https://www.logicbig.com/tutorials/misc/primefaces/select-one-menu-with-ajax.html
中的示例解决的关键是 ajax change
事件没有得到很好的支持(它似乎没有触发 update
)。使用 itemSelect
而不是完全解决了这个问题。
<p:ajax event="itemSelect" update="@all"/>