primefacesデータテーブルの[すべて表示]ボタンを使用したいと思いますが、何か問題があります。ここでは、問題をdemostratesいくつかのテストコードは次のとおりです。Primefaces DataTableの[すべて表示]ボタン
Test.xhtml:
...
<h:form>
<p:selectBooleanCheckbox value="#{testBean.showAll}" itemLabel="Show All">
<p:ajax update="@form"/>
</p:selectBooleanCheckbox>
<p:panel id="test">
<p:dataTable id="values" var="value" value="#{testBean.fullList}" filteredValue="#{testBean.filteredList}" paginatorAlwaysVisible="false"
paginator="#{!testBean.showAll}" rows="#{!testBean.showAll ? 2 : null }" widgetVar="valuesTable"
emptyMessage="No records found.">
<p:column id="enum" sortBy="#{value.toString()}" filterBy="#{value.toString()}" filterMatchMode="contains">
<f:facet name="header">
<h:outputText value="Enum" />
</f:facet>
<h:outputText value ="#{value.toString()}"/>
</p:column>
<p:column id="name" sortBy="#{value.name}" filterBy="#{value.name}" filterMatchMode="contains">
<f:facet name="header">
<h:outputText value="Name" />
</f:facet>
<h:outputText value="#{value.name}" />
</p:column>
</p:dataTable>
</p:panel>
</h:form>
...
そして、ここでTestBean.javaだ:
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;
@Named(value = "testBean")
@SessionScoped
public class TestBean implements Serializable {
public static enum Value {
ONE, TWO, THREE;
public String getName() {
return name().toLowerCase();
}
@Override
public String toString() {
return this.name();
}
}
/**
* Creates a new instance of TestBean
*/
public TestBean() {
}
private boolean showAll = false;
private List<Value> fullList = Arrays.asList(Value.values());
private List<Value> filteredList;
public boolean isShowAll() {
return showAll;
}
public void setShowAll(boolean showAll) {
this.showAll = showAll;
}
public List<Value> getFullList() {
return fullList;
}
public void setFullList(List<Value> fullList) {
this.fullList = fullList;
}
public List<Value> getFilteredList() {
return filteredList;
}
public void setFilteredList(List<Value> filteredList) {
this.filteredList = filteredList;
}
}
私はタブを変更しない場合は、ページが期待どおりに動作します: 'すべて表示'ボタンを切り替えると、3つの値すべてを表示するか、2つだけ表示するように表が更新されます。ただし、show allがチェックされていない場合(2行だけが表示されている)、3番目のレコードを表示するためにテーブルの2番目のページをクリックし、[すべて表示]をクリックすると、テーブルは正しく更新されません。テーブルの上部から(期待どおり)ページネイザーを削除しますが、それでも3番目のレコードしか表示されません。そして、私がすべて表示をオフにして、データテーブルの最初のページに戻ると、それは今も壊れています。
私はajaxの更新ステートメントをテーブルのIDに変更しようとしましたが、結果は変更されませんでした。
何か間違っていますか?前もって感謝します。
あなたは別のScoped ** @ Sess ionScoped ** ** @ ViewScoped **に変更してください! –
@YoucefLaidaniうまくいきませんでした:/ありがとうございました! – lucasvw
このコードでは、 "show all"のclikingはどのように 'fullList'フィールドを変更すると思いますか? –