我有一个带有p:poll标签的jsf页面,其中包含一个监听器和一个更新。调用更新但监听器不是。
我慢慢删除了jsf页面中的部分,直到我将问题缩小到<f:validateLongRange>
标记。如果我删除了验证,那么监听器被调用但是它没有被调用。
简化的jsf页面如下。为什么验证会引起民意调查的问题?
我正在使用在Tomcat 7上运行的primefaces 3.5和JSF 2.1。
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<ui:composition template="/WEB-INF/templates/BasicTemplate.xhtml">
<ui:define name="menuId">
#{trackTabBean.setCurrentTab(trackTabBean.devicesTab)}
</ui:define>
<ui:define name="content">
<f:metadata>
<f:viewParam name="cgId" value="#{deviceBean.inputControlGroupId}"
validatorMessage="Control Group Id must be between 1 and 254">
<f:validateLongRange maximum="254" minimum="0" />
</f:viewParam>
<f:viewParam name="devId" value="#{deviceBean.inputDeviceId}" />
<f:event listener="#{deviceBean.loadDevice}" type="preRenderView"></f:event>
</f:metadata>
<h:form id="deviceForm">
test (Load more code here but removed for testing)
<p:poll interval="5" listener="#{deviceBean.updateDetails}" update="deviceForm"/>
</h:form>
<h:form>
</h:form>
</ui:define>
</ui:composition>
</html>
答案 0 :(得分:1)
您的侦听器未被调用,因为您可能有一些验证错误。在JSF生命周期阶段3是“过程验证”阶段,如果此阶段失败,JSF将立即跳转到阶段6,即“渲染响应”阶段。因此,将跳过调用侦听器的第5阶段“调用应用程序”。
确保deviceBean和inputControlGroupId都不为null并应用给定的约束。
#{deviceBean.inputControlGroupId}