2

我的 pageTemplate 中有一个 a4j:poll,它只是重新呈现一个显示用户未读消息数量的区域。

问题是,页面上 ui:repeat 的每个 value-Method 都会被调用。它不是重新渲染,只是调用了方法,但 ui:repeat 永远不会重新渲染。

我模板中的 a4j:poll 方法:

<h:form id="msg_notif_rep">
    <a4j:region>
        <a4j:poll interval="5000" render="msg_notif" limitRender="true" enabled="false"/>
    </a4j:region>
</h:form>

重新渲染的区域位于插入到模板中的 menuPage 中:

<h:panelGroup layout="block" id="msg_notif">
    <h:panelGroup layout="block" styleClass="header_message_notification" rendered="#{generalServices.getNumberOfUnreadMessagesForCompany(login.currentCompany.id) > 0}">
        <h:panelGroup layout="block" styleClass="header_notification_image">
            <ui:insert name="notification_img"></ui:insert>
        </h:panelGroup>
        <h:panelGroup layout="block" styleClass="header_notification_number">
            <h:outputText value="#{generalServices.getNumberOfUnreadMessagesForCompany(login.currentCompany.id)}" />
        </h:panelGroup>
    </h:panelGroup>
</h:panelGroup>

现在,使用 a4j:poll 所在模板的 JSF-Page 中的每个 value-Method ui:repeat 将每 5 秒调用一次,但 ui:repeat 永远不会重新渲染。

例如:

<h:panelGroup layout="block" rendered="#{!messagesCompany.showSingleConv}" styleClass="message_overview_cont" id="conv_overview">
    <ui:repeat value="#{messagesCompany.allConvos}" var="c">
        <tb:conversationOverviewCompany conv="#{c}" isTibConv="#{c.tibMessage}" 
                        containerID="#{rich:clientId('cont')}, #{rich:clientId('msg_notif')}, #{rich:clientId('msg_notif_rep')}" />
    </ui:repeat>
</h:panelGroup>

用 a4j:repeat 替换 ui:repeat 不会改变行为,删除 ui:repeat 中的所有内容也无济于事。不调用各种其他方法(a4j:commandLink、getter-Methods for h:outputText ...),只调用 ui:repeat 的 value-Method。

有没有办法阻止这种行为?

4

0 回答 0