1

<p:ajax event="sort"何らかの奇妙な理由で、 insideを使用しているときにデータを処理できませんが、と<p:dataTableでは問題なく動作します。<p:ajax event="page"<p:ajax event="filter"

私はprimefaces 3.4でmyfaces 2.0.11を使用しています(4.0スナップショットで試しました)

セル入力を編集してPAGINATE実行すると、リスナー メソッドでセルの更新された値が表示されます。

セル入力を編集してSORTを実行すると、リスナー メソッドでセルの更新された値が表示されません。つまり、両方の p:ajax (sort/page) が process="@form" を取得したので、なぜ処理されないのですか? Chrome 開発ツールのネットワークを調べたところ、どちらの場合も (ソート/ページ)、関連する更新された値がサーバーに送信されていますが、何らかの理由でソート リスナーで値が更新されていません。

ところで、ページとソート ajax リクエストの唯一の疑わしい違いは、ソート リクエストにのみ存在する次のパラメータです。

my_table_skipChildren:true、 どういう意味ですか?処理をスキップしますか?

ExternalContext からのリクエストから関連する ids+value を取得できますが、これは最後の手段になります。

これは本当に簡単な例です

セッション スコープ Bean コード:

@ManagedBean
@SessionScoped
public class myBean {
    private List<MyObject> myList = new ArrayList<MyObject>();

    @PostConstruct
    public void init() {
        myList.add(new MyObject("1", "2"));
        myList.add(new MyObject("11", "22"));
        myList.add(new MyObject("111", "222"));

        myList.add(new MyObject("1a", "2a"));
        myList.add(new MyObject("11a", "22a"));
        myList.add(new MyObject("111a", "222a"));
   }

    public List<MyObject> getMyList() {
        return myList;
    }

    public void setMyList(List<MyObject> myList) {
        this.myList = myList;
    }   
}

MyObject コード

public class MyObject {

   private String one;
   private String two;

   public MyObject(String one, String two) {
      super();
      this.one = one;
      this.two = two;
   }

   public String getOne() {
      return one;
   }

   public void setOne(String one) {
      this.one = one;
   }

   public String getTwo() {
      return two;
   }

   public void setTwo(String two) {
       this.two = two;
   }
}

XHTML :

<p:dataTable id="my_table" value="#{myBean.myList}"
   var="deviceRow" widgetVar="myTable"
   paginator="true" rows="4" paginatorPosition="bottom"
   paginatorTemplate="{FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}">

   <p:ajax process="@form" event="sort" listener="#{myBean.detectSortEvent}"></p:ajax>
   <p:ajax process="@form" event="page" listener="#{myBean.detectPageEvent}"></p:ajax>

   <p:column id="table_selection_column_one" sortBy="#{deviceRow.one}" filterBy="#{deviceRow.one}">

      <f:facet name="header">
         <h:outputText value="Column One" />
      </f:facet>
      <h:inputText id="myRow_One" value="#{deviceRow.one}" />
   </p:column>

   <p:column id="table_selection_column_two" sortBy="#{deviceRow.two}" filterBy="#{deviceRow.two}">
      <f:facet name="header">
         <h:outputText value="Column Two" /> 
      </f:facet>
      <h:inputText id="myRow_Two" value="#{deviceRow.two}" />
   </p:column>

</p:dataTable>

(primefaces フォーラムでも質問しましたが、応答がありませんでした)


Andyの回避策を試しました(editable="true"テーブルに追加しましたが、うまくいきません

シナリオは次のとおりです。入力テキストの値を変更し、テーブルの列ヘッダーをクリックして並べ替えを行います

期待:detectSortEventリスナー内リスト内に更新された値が表示されます

現実: リスト内の同じ古い値

よろしく、

ダニエル。

4

0 に答える 0