0

これに基づいてAJAXでリピーターリストを更新しようとしています: How to re-render <ui:repeat> using <f:ajax render>

ただし、ManagedBean の ArrayList が更新されたとしても、HTML リストは最初のロード後に更新されません。

これが私のxHTMLファイルにあるものです:

<h:form>
   <h:panelGroup id="messages">
       <a4j:repeat var="mes" value="#{talking.listMessages}">
          <h:outputText value="#{mes.sendTime}">
             <f:convertDateTime type="date" pattern="dd-MM-yyyy HH:mm"/>                                
          </h:outputText>
          #{mes.content}
       </a4j:repeat> 
   </h:panelGroup>
   <a4j:commandLink action="#{talking.testAdd}">
      <h:outputText value="Add Item" />
      <f:ajax execute="@form" render="messages" />
   </a4j:commandLink>
</h:form>

MB では、次の簡単なアクションを実行しました。

private ArrayList<Message> listMessages;

public void testAdd() {
  this.listMessages.add(new Message(/* [...] */));
}

私は何か見落としてますか ?

4

1 に答える 1

2

については、RichFaces のドキュメントを確認してください<a4j:commandLink>

このコンポーネントは、プラグインされた Ajax 動作が含まれている点を除いて、JavaServer Faces (JSF) コンポーネントに似ています。

これを知っていると、問題は で<f:ajax>動作しないこと<a4j:commandLink>です。コードを次のように書き直す必要があります。

<h:form>
   <h:panelGroup id="messages">
       <a4j:repeat var="mes" value="#{talking.listMessages}">
          <h:outputText value="#{mes.sendTime}">
             <f:convertDateTime type="date" pattern="dd-MM-yyyy HH:mm"/>
          </h:outputText>
          #{mes.content}
       </a4j:repeat>
   </h:panelGroup>
   <a4j:commandLink action="#{talking.testAdd}"
      render="messages">
      <h:outputText value="Add Item" />
   </a4j:commandLink>
</h:form>

また、マネージド Bean が であることを確認してください@ViewScoped

于 2013-01-15T22:35:22.003 に答える