2013-01-17 75 views
0

所以我有一個頁面要求用戶輸入我將用於在數據庫中進行搜索的人員信息,以獲得更強大的人口統計信息。我遇到的問題是,當添加人員在搜索中查找(通過a)時,我將新行添加到列。JSF 1.2 dataTable動態添加列

用戶說他們不想垂直渲染數組。他們想要水平渲染,這意味着每個父對象都有一個新的列。只有父母如此,其餘的addRow對他們來說工作得很好,但他們想要並肩比較。我迷失在如何通過jsf/jsp做到這一點。以下是我目前有:

<div style="overflow: auto; width: 1250px; height: 200px;"> 
<h:dataTable var="root" value="#{bcCreateMessageHandler.bcCreateInstance.inputValuesArray['/newParent/Persons[]/'].values}" styleClass="MaxWidth" headerClass="ArrayHeader"> 
    <h:column> 
     <f:facet name="header"> 
      <h:outputText styleClass="ArrayLabel" value="Persons"/> 
     </f:facet> 
    </h:column> 
    <h:column> 
     <f:facet name="header"> 
      <h:panelGrid columns="2" columnClasses="MaxWidth"> 
       <h:outputText value="" /> 
       <h:commandLink value="#{bundle['MSG_ARRAY_ADD_ENTRY']}" styleClass="NavigationLink" binding="#{commandLink.instance}" 
disabled="#{!bcCreateMessageHandler.bcCreateInstance.inputValuesArray['/newParent/Persons[]/'].addPossible}" 
action="#{bcCreateMessageHandler.bcCreateInstance.inputValuesArray['/newParent/Persons[]/'].addRow}"/> 
      </h:panelGrid> 
     </f:facet> 
     <h:panelGrid columns="2" styleClass="ArrayEntryHeader" columnClasses="MaxWidth"> 
      <h:outputText styleClass="ArrayLabel" value="Create Case Person" /> 
      <h:commandLink value="#{bundle['MSG_ARRAY_REMOVE_ENTRY']}" styleClass="NavigationLink" 
binding="#{commandLink.instance}" 
disabled="#{!bcCreateMessageHandler.bcCreateInstance.inputValuesArray['/newParent/Persons[]/'].removePossible}" 
action="#{root['~REMOVE~'].removeRow}"/> 
     </h:panelGrid> 
     <h:outputText value=""/> 
     <h:panelGrid columns="2"> 
      <h:outputText styleClass="ViewFieldLabel" value="PersonFirstName"/> 
      <h:inputText id="PersonFirstName_ID" styleClass="ViewEntryField" value="#{root['PersonFirstName']}" required="false"/> 
      <h:outputText styleClass="ViewFieldLabel" value="Person's Last Name"/> 
      <h:inputText id="PersonLastName_ID" styleClass="ViewEntryField" value="#{root['PersonLastName']}" required="false"/> 
      <h:outputText styleClass="ViewFieldLabel" value="Person's Middle Name"/> 
      <h:inputText id="PersonMiddleName_ID" styleClass="ViewEntryField" value="#{root['PersonMiddleName']}" required="false"/> 
      <h:outputText styleClass="ViewFieldLabel" value="Date of Birth"/> 
      <h:panelGroup> 
       <h:inputText id="DateOfBirth_ID" styleClass="ViewEntryField" value="#{root['DateOfBirth']}" required="false"> 
        <hx:convertDateTime type="date"/> 
        <hx:inputHelperDatePicker/> 
       </h:inputText> 
       <h:message styleClass="errorDetailsValidation" for="DateOfBirth_ID"/> 
      </h:panelGroup> 
      <h:outputText styleClass="ViewFieldLabel" value="SUPER ID"/> 
      <h:panelGroup> 
       <h:inputText id="SUPERID_ID" styleClass="ViewEntryField" value="#{root['SUPERID']}" required="false"> 
        <f:converter converterId="IntegerConverter"/> 
       </h:inputText> 
       <h:message styleClass="errorDetailsValidation" for="SUPERID_ID"/> 
      </h:panelGroup> 
     </h:panelGrid> 
     <h:outputText value=""/> 
     <h:dataTable var="nested_1_1_1" value="#{root['OtherIDs[]/'].values}" styleClass="MaxWidth" headerClass="ArrayHeader">  
      <h:column> 
       <f:facet name="header"> 
        <h:outputText styleClass="ArrayLabel" value="OtherIDs"/> 
       </f:facet> 
      </h:column> 
      <h:column> 
       <f:facet name="header"> 
        <h:panelGrid columns="2" columnClasses="MaxWidth"> 
         <h:outputText value="" /> 
         <h:commandLink value="#{bundle['MSG_ARRAY_ADD_ENTRY']}" styleClass="NavigationLink" 
binding="#{commandLink.instance}" 
disabled="#{!root['OtherIDs[]/'].addPossible}" 
action="#{root['OtherIDs[]/'].addRow}"/> 
        </h:panelGrid> 
       </f:facet> 
       <h:panelGrid columns="2" styleClass="ArrayEntryHeader" columnClasses="MaxWidth"> 
        <h:outputText styleClass="ArrayLabel" value="Other ID" /> 
        <h:commandLink value="#{bundle['MSG_ARRAY_REMOVE_ENTRY']}" styleClass="NavigationLink" 
binding="#{commandLink.instance}" 
disabled="#{!root['OtherIDs[]/'].removePossible}" 
action="#{nested_1_1_1['~REMOVE~'].removeRow}"/> 
       </h:panelGrid> 
       <h:outputText value=""/> 
       <h:panelGrid columns="2"> 
        <h:outputText styleClass="ViewFieldLabel" value="ID"/> 
        <h:inputText id="ID_ID" styleClass="ViewEntryField" value="#{nested_1_1_1['ID']}" required="false"/> 
        <h:outputText styleClass="ViewFieldLabel" value="Source System of Other ID"/> 
        <h:selectOneMenu styleClass="ViewEntryField" value="#{nested_1_1_1['IdType']}"> 
         <f:selectItem itemValue="TYPE1" itemLabel="TYPE1"/> 
         <f:selectItem itemValue="TYPE2" itemLabel="TYPE2"/> 
        </h:selectOneMenu> 
       </h:panelGrid> 
      </h:column> 
     </h:dataTable> 
     <h:outputText value=""/> 
     <h:panelGrid columns="2"> 
      <h:outputText styleClass="ViewFieldLabel" value="Gender"/> 
      <h:selectOneMenu styleClass="ViewEntryField" value="#{root['Gender']}"> 
       <f:selectItem itemValue="M" itemLabel="M"/> 
       <f:selectItem itemValue="F" itemLabel="F"/> 
       <f:selectItem itemValue="U" itemLabel="U"/> 
      </h:selectOneMenu> 
     </h:panelGrid> 
     <h:outputText value=""/> 
     <h:dataTable var="nested_1_2_1" value="#{root['AliasNames[]/'].values}" styleClass="MaxWidth" headerClass="ArrayHeader">  
      <h:column> 
       <f:facet name="header"> 
        <h:outputText styleClass="ArrayLabel" value="AliasNames"/> 
       </f:facet> 
      </h:column> 
      <h:column> 
       <f:facet name="header"> 
        <h:panelGrid columns="2" columnClasses="MaxWidth"> 
         <h:outputText value="" /> 
         <h:commandLink value="#{bundle['MSG_ARRAY_ADD_ENTRY']}" styleClass="NavigationLink" 
binding="#{commandLink.instance}" 
disabled="#{!root['AliasNames[]/'].addPossible}" 
action="#{root['AliasNames[]/'].addRow}"/> 
        </h:panelGrid> 
       </f:facet> 
       <h:panelGrid columns="2" styleClass="ArrayEntryHeader" columnClasses="MaxWidth"> 
        <h:outputText styleClass="ArrayLabel" value="aliasNames" /> 
        <h:commandLink value="#{bundle['MSG_ARRAY_REMOVE_ENTRY']}" styleClass="NavigationLink" 
binding="#{commandLink.instance}" 
disabled="#{!root['AliasNames[]/'].removePossible}" 
action="#{nested_1_2_1['~REMOVE~'].removeRow}"/> 
       </h:panelGrid> 
       <h:outputText value=""/> 
       <h:panelGrid columns="2"> 
        <h:outputText styleClass="ViewFieldLabel" value="Last Name"/> 
        <h:inputText id="LastName_ID" styleClass="ViewEntryField" value="#{nested_1_2_1['LastName']}" required="false"/> 
        <h:outputText styleClass="ViewFieldLabel" value="First Name"/> 
        <h:inputText id="FirstName_ID" styleClass="ViewEntryField" value="#{nested_1_2_1['FirstName']}" required="false"/> 
        <h:outputText styleClass="ViewFieldLabel" value="Middle Name"/> 
        <h:inputText id="Middle_ID" styleClass="ViewEntryField" value="#{nested_1_2_1['Middle']}" required="false"/> 
       </h:panelGrid> 
      </h:column> 
     </h:dataTable> 
     <h:outputText value=""/> 
     <h:panelGrid columns="2"> 
      <h:outputText styleClass="ViewFieldLabel" value="Date Person Expired"/> 
      <h:panelGroup> 
       <h:inputText id="DateExpired_ID" styleClass="ViewEntryField" value="#{root['DateExpired']}" required="false"> 
        <hx:convertDateTime type="date"/> 
        <hx:inputHelperDatePicker/> 
       </h:inputText> 
       <h:message styleClass="errorDetailsValidation" for="DateExpired_ID"/> 
      </h:panelGroup> 
     </h:panelGrid> 
    </h:column> 
</h:dataTable> 

回答

0

所以,如果你想將列添加動態您dataTable您可以使用第三方組件這樣做有兩種方式,binding your dataTable到您的支持bean OR庫如RichFaces它使您能夠有powered data tables,您可以在其中定義一個columns標籤來動態創建它們。選擇其中之一,集成Richfaces意味着將相應的庫添加到您的類路徑並對其進行配置。