Jsf 2 未调用PrimeFaces轮询侦听器
我有一个jsf页面,其中有一个p:poll标记、一个侦听器和一个更新。已调用更新,但未调用侦听器 我慢慢地从jsf页面中删除了部分,直到我将问题缩小到一个Jsf 2 未调用PrimeFaces轮询侦听器,jsf-2,primefaces,Jsf 2,Primefaces,我有一个jsf页面,其中有一个p:poll标记、一个侦听器和一个更新。已调用更新,但未调用侦听器 我慢慢地从jsf页面中删除了部分,直到我将问题缩小到一个标记。如果我删除了validate,则会调用侦听器,但在其中不会调用 下面是简化的jsf页面。为什么验证会导致投票出现问题 我使用的是运行在Tomcat7上的PrimeFaces3.5和JSF2.1 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.s
标记。如果我删除了validate,则会调用侦听器,但在其中不会调用
下面是简化的jsf页面。为什么验证会导致投票出现问题
我使用的是运行在Tomcat7上的PrimeFaces3.5和JSF2.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>
#{trackTabBean.setCurrentTab(trackTabBean.devicesTab)}
测试(在此处加载更多代码,但为测试而删除)
您的侦听器没有被调用,因为您可能有一些验证错误。在JSF生命周期的第3阶段是“流程验证”阶段,如果该阶段失败,JSF将立即跳到第6阶段,即“呈现响应”阶段。因此,将跳过调用侦听器的第5阶段“调用应用程序”
确保deviceBean和inputControlGroupId均不为null并应用给定的约束
#{deviceBean.inputControlGroupId}
谢谢Sonic,这似乎是正确的。但是,deviceBean和inputControlGroupId都不为null,但参数并不总是存在。cgId viewparam是一个可选的输入参数,因此当它未定义时,我会得到问题,但当它被定义时,我不会。还有,为什么我不能得到一些验证异常?我可以删除验证标记,因为它在我的情况下不太重要,但是如果能够完全理解正在发生的事情就好了。因为cgId是一个可选参数,所以只有在设置了该参数的情况下,您才应该呈现验证标记。您可以通过添加相应的测试来实现这一点。由于变量尚未设置,当JSF在其验证阶段尝试访问此参数时,您将得到RuntimeException Nullpointer异常,而不是checked验证异常。这就是程序崩溃的原因。如果要跳过验证,请使用
immediate=“true”
。例如:
的可能重复