所以,我有代码:
<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">
但我不明白它是如何运作的......任何人都可以帮助我理解这个或者只是解释一下。谢谢。