<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リスナー内リスト内に更新された値が表示されます
現実: リスト内の同じ古い値
よろしく、
ダニエル。