没有调用PrimeFaces Poll监听器

时间:2013-07-04 07:22:50

标签: jsf-2 primefaces

我有一个带有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>

1 个答案:

答案 0 :(得分:1)

您的侦听器未被调用,因为您可能有一些验证错误。在JSF生命周期阶段3是“过程验证”阶段,如果此阶段失败,JSF将立即跳转到阶段6,即“渲染响应”阶段。因此,将跳过调用侦听器的第5阶段“调用应用程序”。

确保deviceBean和inputControlGroupId都不为null并应用给定的约束。

#{deviceBean.inputControlGroupId}