如何在h:dataTable中获取多个h:selectOneMenu值

时间:2015-10-26 10:35:48

标签: jsf primefaces

我正在数据表中使用h selectOneMenu,当用户按下Set Fixture按钮时,我将保存下拉列表中更改的值,现在我使用String变量来获取所选值,但问题是它从最后一个下拉列表中选择所选值。 我的问题是如何获取所有下拉菜单的列表?

 <h:form id="chooseAlmFixtureForm">
      <p:panel style="width:80%" header="Set Fixture for Alarms">
        <p:dataTable id="tbsetFixtureTable" value="#{setAlmFixtures.alarms}" var="alarmvar" dynamic="false">
             <p:column>
                <p:commandLink value="View" update=":viewUnknownAlarm" immediate="true" oncomplete="viewDialog.show()">
                <f:setPropertyActionListener target="#{currentalarms.viewAlarm}" value="#{alarmvar}"/>
                </p:commandLink>
             </p:column>
             <p:column>
                <f:facet name="header">
                    <h:outputText value="Alarm Time"/>
                </f:facet>
                <h:outputText value="#{alarmvar.recvTime}"/>       
             </p:column>
             <p:column>
                <f:facet name="header">
                    <h:outputText value="Alarm Type"/>
                </f:facet>
                <h:outputText value="#{alarmvar.alarmType}"/>    
             </p:column>
            <p:column>
                <f:facet name="header">
                    <h:outputText value="Controller Name"/>
                </f:facet>
                <h:outputText value="#{alarmvar.controllerName}"/>    
             </p:column>
            <p:column>
                <f:facet name="header">
                    <h:outputText value="Controller Type"/>
                </f:facet>
                <h:outputText value="#{alarmvar.controllerType}"/>    
             </p:column>
            <p:column>
            <f:facet name="header">
                    <h:outputText value="Choose Fixture"/>
            </f:facet>
            <h:selectOneMenu id="selectAlarmSite" value="#{setAlmFixtures.selectedFixture}">
                        <f:selectItems value="#{setAlmFixtures.fixtures}" />
            </h:selectOneMenu>
            </p:column>
       </p:dataTable>
       <p:commandButton value="Set Fixtures" actionListener="#{setAlmFixtures.setAlarmsFixtures}" action="#{horizontalmenu.actionCallAlarmsPage}" styleClass="dialogButton"/>
       </td><td>
       <p:commandButton value="Cancel" actionListener="#{setAlmFixtures.releaseAlarms}" action="#{horizontalmenu.actionCallAlarmsPage}" styleClass="dialogButton"/>
    </p:panel>
    </h:form>

1 个答案:

答案 0 :(得分:0)

目前,您的下拉值是指您的bean中的单个变量(类似selectedFixture的{​​{1}})。单个变量如何表示多行的状态(值)(此处为:报警)?

您需要将所选值链接到它引用的行(警报)。为此,您可以选择以下两种方法:

  1. 使用alarm-object的变量,就像在其他列中使用它们作为outputvalues一样。这样,报警装置直接设置在值(表格)处理上。目前,您的两个按钮都提交了表单(默认为SetAlmFixtures),具体取决于您的操作说明者所执行的操作,您可以考虑更改取消 - 按钮type="submit"type

  2. 映射灯具和警报。假设所有警报都具有非空id,您可以使用button将警报ID映射到其选定的装置。地图的值可以由Map<Long, Fixture> fixturemap;引用。确保为地图和id提供getter。此外,您需要使用每个警报的初始夹具值初始化地图。