1

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

1 回答 1

2

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

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

#{deviceBean.inputControlGroupId}
于 2013-07-04T11:46:05.790 回答