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>

reRendered Region は、テンプレートに挿入された 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 ページ内のすべての 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>

ui:repeat を a4j:repeat に置き換えても動作は変わらず、ui:repeat 内のすべてを削除しても役に立ちませんでした。他のさまざまなメソッド (a4j:commandLink、h:outputText の getter メソッドなど) は呼び出されず、ui:repeat の value メソッドのみが呼び出されます。

この動作を停止する方法はありますか?

4

0 に答える 0