Jsf 2 未调用PrimeFaces轮询侦听器

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

我有一个jsf页面,其中有一个p:poll标记、一个侦听器和一个更新。已调用更新,但未调用侦听器

我慢慢地从jsf页面中删除了部分,直到我将问题缩小到一个
标记。如果我删除了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”
。例如:
的可能重复