JSF 1.2 dataTable动态添加列

时间:2013-01-17 13:51:04

标签: jsp datatable jsf-1.2

所以我有一个页面要求用户输入我将用于在数据库中进行搜索的人员信息,以获得更强大的人口统计信息。我遇到的问题是,当然后在搜索中添加要查找的人(通过a)我将新行添加到列。

用户说他们不想垂直渲染数组。他们想要水平渲染,这意味着每个父对象都有一个新列。并且只有父母如此,如果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>

1 个答案:

答案 0 :(得分:0)

因此,如果您想要动态地向您的dataTable添加列,您可以通过两种方式执行此操作,binding your dataTable使用第三方组件库(如支持bean OR RichFaces ,您可以使用powered data tables来定义columns标记以动态创建它们。选择其中一个,集成Richfaces意味着将相应的库添加到类路径并进行配置。