0

私の jsf の 2 つの主なコンポーネントは、p:tree と p:dataTable です。

アイデアは、ツリー ノードの選択に従ってテーブルを作成することです。

JSF:

<h:panelGrid columns="2" style="width: 100%" columnClasses="treeColumn,tableColumn">
        <h:panelGroup id="treePanel">
            <p:tree id="tree" 
                    value="#{genRepBean.root}" 
                    var="node" 
                    dynamic="true" 
                    cache="true" 
                    animate="true"
                    selectionMode="single"
                    selection="#{genRepBean.selectedNode}"
                    rendered="#{genRepBean.renderTree}"> 
                <p:ajax event="select" listener="#{genRepBean.onNodeSelect}" update=":mainForm:tablePanel"/>
                <p:treeNode expandedIcon="ui-icon-folder-open"  
                            collapsedIcon="ui-icon-folder-collapsed">  
                    <h:outputText value="#{node.name}" styleClass="tableTreeText"/>  
                </p:treeNode> 
                <p:treeNode type="au" icon="ui-icon-document">  
                    <h:outputText value="#{node.name}" />  
                </p:treeNode>  
            </p:tree> 
        </h:panelGroup>
        <h:panelGroup id="tablePanel">
            <p:dataTable id="acqDataTable"
                         var="acq"
                         value="#{genRepBean.acqList}" 
                         rendered="#{genRepBean.renderTable}"
                         filteredValue="#{genRepBean.filteredAcqList}"
                         paginator="true"
                         paginatorPosition="bottom"
                         paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
                         rowsPerPageTemplate="5,10,15"
                         rows="10"
                         lazy="false"
                         style="width: 100%">
                <p:column headerText="ID" sortBy="#{acq.Id}" styleClass="tableTreeText"> 
                    <h:outputText value="#{acq.Id}" />  
                </p:column>
                <p:column headerText="IP ADDRESS" sortBy="#{acq.ipAddress}" styleClass="tableTreeText">  
                    <h:outputText value="#{acq.ipAddress}"/>  
                </p:column>
                <p:column headerText="STEP" sortBy="#{acq.Step}" filterBy="#{acq.Step}" filterMatchMode="contains" styleClass="tableTreeText">  
                    <h:outputText value="#{acq.Step}"/>  
                </p:column>
                <p:column headerText="STATUS" sortBy="#{acq.status}" filterBy="#{acq.status}" styleClass="tableTreeText">  
                    <h:outputText value="#{acq.status}"/>  
                </p:column>  
            </p:dataTable>

Bean (onNodeSelect):

public void onNodeSelect() {
acqList.clear();
    this.acqList = AcqHelper.getAllViaStartDate(new java.sql.Date(startDate.getTime()));
    if (!acqList.isEmpty()) {
        DataTable dataTable = (DataTable) FacesContext.getCurrentInstance().getViewRoot().findComponent("mainForm:acqDataTable");
        dataTable.reset();
        renderTable = true;
  }

クライアントにとって非常に使いやすいため、フィルターオプションを削除したくありませんが、テーブルの更新をブロックする理由がわかりません??

どんな助けでも素晴らしいでしょう

ありがとう

4

1 に答える 1

0

DataTable モデルに変更を加える必要はありません。Primefaces は からデータを取得してい#{genRepBean.acqList}ます。そのリストに適切な値を設定し、リストをリセットするだけ#{genRepBean.filteredAcqList}です。リクエストが完了すると、データテーブルは新しい値で更新されます。

于 2013-01-05T01:46:14.300 に答える