2012-06-27 70 views
0

我一直在挖掘檔案找到可能有幫助的答案,但似乎沒有什麼適用。Primefaces dataTable只添加一行

我有一個jsf中的頁面,其中嵌套的dataTables擁有支持bean的列表。該頁面似乎在保存數據時沒有任何問題,但是當我嘗試使用p:collector Primefaces對象添加我的dataTables的行時,我的dataTable只顯示一行。我總是爲這兩個列表添加一個空對象。

列表中包含的對象是實現Serializable的自定義對象。

我的支持bean是ConversationScoped,當對話開始時,支持bean中的數據被實例化。

這是我的主網頁:

<ui:composition template="/templates/pageLayout.xhtml"> 

    <ui:define name="pageContent"> 

     <h:form id="genericWorkflowMainForm" enctype="multipart/form-data"> 

      <p:panel id="actionList"> 
       <div align="right"> 
        <p:commandButton id="addActionButton" value="Add Action" update="actionTable" 
            action="#{createGenericWorkflowBean.addAction}" ajax="false"> 
         <p:collector id="addActionCollector" value="#{createGenericWorkflowBean.actionRow}" 
            addTo="#{createGenericWorkflowBean.genericWorkflowData.actionGroup.actionCompletionList}"/> 
        </p:commandButton> 
       </div> 
       <h:dataTable id="actionTable" var="actions" 
          value="#{createGenericWorkflowBean.genericWorkflowData.actionGroup.actionCompletionList}"> 
        <h:column> 
         <h:outputLabel value="Action " /> 
         <h:inputTextarea id="actionText" value="#{actions.actionRecord.actionText}" /> 
         <br/> 
         <p:panel id ="actioneePanel"> 
          <div align="right"> 
           <p:commandButton id="addApproverButton" value="Add Approver" onclick="addApprover.show()"/> 
          </div> 
          <h:dataTable value="#{actions.actionRecord.actionees}" id="actioneeListValues" var="actioneeRecord"> 
           <h:column> 

            <h:outputText id="actioneeLabel" value="Actionee " /> 
            <h:outputText id="actionee" value="#{actioneeRecord.user.user.name}" /> 

            <h:outputText id="actioneeCommentlabel" value="Comments " rendered="#{actioneeRecord.user.display}"/> 
            <h:inputTextarea id ="actioneeComment" value="#{actioneeRecord.userComment}" rendered="#{actioneeRecord.user.display}"/> 

            <br/> 
            <p:commandLink id="removeActionee" value="Remove" update="actioneeListValues" rendered="#{!actioneeRecord.user.display}"> 
             <p:collector value="#{actioneeRecord}" removeFrom="#{actions.actionRecord.actionees}"/> 
            </p:commandLink> 

           </h:column> 

          </h:dataTable> 

          <p:dialog id="addApprover" header="Add Approver" widgetVar="addApprover" modal="false" closable="false" 
             resizable="false" width="250"> 
           <div> 
            <p:autoComplete id="autoCompleteApprover" value="#{createGenericWorkflowBean.newApprover}" 
                /**//> 
            <br/> 
            <p:commandButton id="addNewApprover" title="Add Approver" value="Add" 
                update="actioneeListValues" onclick="addApprover.hide()" ajax="false" 
                action="#{createGenericWorkflowBean.addApprover()}"> 
             <p:collector value="#{createGenericWorkflowBean.newApprover}" 
                addTo="#{actions.actionRecord.actionees}"/> 

            </p:commandButton> 

           </div> 
          </p:dialog> 
         </p:panel> 
        </h:column> 
       </h:dataTable> 
      </p:panel> 

     </h:form> 
    </ui:define> 
</ui:composition> 

下面是我支持bean的,涉及到與p的部分:該列表的集電極添加和刪除部分。

@Named 
@ConversationScoped 
public class CreateGenericWorkflowBean extends WorkflowBean { 

    @Inject 
    Conversation conversation; 

    private Actionee newApprover; 

    private ActionCompletionRecord actionRow = new ActionCompletionRecord(); 

    private Actionee actioneeRow = new Actionee(); 

    public GenericWorkflowData getGenericWorkflowData() { 
     return (GenericWorkflowData) getData(); 
    } 

    public void addApprover() { 

     setNewApprover(new Actionee()); 

    } 

    public void addAction() { 
     actionRow = new ActionCompletionRecord(); 
    } 

} 

我仍然在學習JSF和Primefaces,所以我不知道如果我做的東西,將只是不工作。

任何幫助將不勝感激。

馬特泰勝

+2

這是太多的代碼。請儘可能以最小的可能性完成單個XHTML頁面和單個支持bean。例如,爲了重現完全相同的問題,絕對需要''標記和'style =「border:none」'屬性的絕對必要嗎?沒有?只是省略它。這同樣適用於所有其他不必要的標籤,屬性,屬性等。提供儘可能最小的包含**的代碼**只需複製並運行代碼即可自行重現問題的代碼。 – BalusC

+0

刪除所有的糠。。對不起,我在這裏發佈問題還很新。 – mtatham

回答

0

實體類有@override方法,這是在創建新的實體,通過創造新的實體嚮導生成。從實體中刪除所有重寫的方法並保存。就這樣。現在它會工作。

+1

在發佈複製和粘貼樣板/逐字回答多個問題時要小心,這些問題往往會被社區標記爲「垃圾」。如果你這樣做,那麼它通常意味着問題是重複的,所以標記它們。 – Kev