f:ajax仅在重新加载页面后重新加载内容

时间:2015-12-02 07:15:40

标签: ajax jsf

所以,我有代码:

<h:form id="newMessages" rendered="#{not empty welcome.letters and urlBean.welcome}" styleClass="infoNotes">
 **some not important code here**
    <ui:repeat id="data" value="#{welcome.letters}" var="letter" varStatus="status">
        <h:panelGroup rendered="#{status.index lt 3}">
            <div>
                <h:commandLink styleClass="noticeClose" rendered="#{letter.content.IMPORTANCE ne '2'}">
                    <f:ajax listener="#{welcome.onMessageNoticeClose(letter)}" event="click" render="#{cc.clientId}:newMessages newLettersCount"/>
                </h:commandLink>
            </div>
        </h:panelGroup>
 **some not important code here**
    </ui:repeat>
 **some not important code here**
</h:form>

我们点击&#34>时使用的方法关闭按钮

public void onMessageNoticeClose(Document letter) {
    try (RequestContext ctx = RequestContextFactory.create()) {
        DocumentEngine.getInstance().markAsRead(letter, true, ctx);
    }
    Utils.getRolesBean().recalcMessageCount();
    loadMessages();
}

以及重新计算邮件计数和加载新邮件的几种方法。因此,如果我们有新的未读消息,我们会在主页面上显示它们(其中3个)。所以,问题是当我们点击关闭按钮&#39; styleClass =&#34; noticeClose&#34;&#39;,我们将字母标记为已读并且未在主页面上显示。但是由于该代码有bug,如果在列表中我们只有一个消息和按钮紧密点击,这个字母标记为&#34; read&#34;和消息计数recalc正确,但它仍然显示在主页上,并且只有在重新加载页面后才会呈现。因此,解决方法是,如果我们h:用h:formgroup形成环绕声,如:

<h:panelGroup id="newMessages">
        <h:form rendered="#{not empty welcome.letters and urlBean.welcome}" styleClass="infoNotes">

但我不明白它是如何运作的......任何人都可以帮助我理解这个或者只是解释一下。谢谢。

0 个答案:

没有答案