使用每列的不同列表在数据表中获取选定的单元格对象

时间:2017-02-04 10:35:41

标签: java jsf datatable xhtml

我正在尝试使用<p:datatable>制定时间表。目前我正在使用<f:setPropertyActionListener>对其进行测试,并尝试使用数据表中的rowIndexVar,如我在列周二的代码中所示。不幸的是它没有用。问题是底层模型包含5个列表(每个工作日1),因此我在每列上寻址不同的列表。

我不知道我是否接近真正的错误。但到目前为止它没关系,现在我只有问题,我想从我点击的相应单元格中提取数据。到目前为止,这是我的表:

<p:dataTable id="schedule" var="rows" value="#{scheduleBean.emptyRowDefault}"  
             editMode="cell" 
             rowIndexVar="index"                                   
             widgetVar="cellCars" >
    <f:facet name="header">
        #{msg['schedule']}
    </f:facet>
    <p:column headerText="#{msg['hour']}">
        <h:outputText value="#{index+1}" />
    </p:column>

    <p:column headerText="#{msg['time']}">
       <h:outputText value="#{scheduleBean.schedule.times[index]}" />
    </p:column>

    <p:column headerText="#{msg['monday']}">
         <p:commandLink value="#{scheduleBean.schedule.monday[index].name}" onclick="PF('subjectDialog').show();" />  
    </p:column>

    <p:column headerText="#{msg['tuesday']}">
          <p:commandLink update=":form:eventDetails" onclick="PF('subjectDialog').show();" >   
              <f:setPropertyActionListener value="#{scheduleBean.schedule.tuesday.get(index)}" target="#{scheduleBean.subject}" />
              <h:outputText value="#{scheduleBean.schedule.tuesday[index].name}" />
          </p:commandLink>
     </p:column>

     <p:column headerText="#{msg['wednesday']}" >
         <p:commandLink value="#{scheduleBean.schedule.wednesday[index].name}" onclick="PF('subjectDialog').show();" />  
     </p:column>

     <p:column headerText="#{msg['thursday']}">
         <p:commandLink value="#{scheduleBean.schedule.thursday[index].name}" onclick="PF('subjectDialog').show();" />                       
     </p:column>

     <p:column headerText="#{msg['friday']}">
         <p:commandLink value="#{scheduleBean.schedule.friday[index].name}" onclick="PF('subjectDialog').show();" />  
     </p:column>
</p:dataTable>

这个对话框:

<p:dialog widgetVar="subjectDialog" header="Neues Fach anlegen" showEffect="clip" hideEffect="clip" resizable="false">
     <h:panelGrid id="eventDetails" columns="2">
          <p:outputLabel for="name" value="#{msg['subject']}" />
          <p:inputText id="name" value="#{scheduleBean.subject.name}" required="true" />

          <p:outputLabel for="hour" value="#{msg['hour']}" />
              <h:selectOneMenu id="hour" value="#{scheduleBean.subject.hourTime}" style="width:100%">
                  <f:selectItems value="#{scheduleBean.schedule.hours}" var="day" itemLabel="#{hour}" itemValue="#{hour}" />
              </h:selectOneMenu>

          <p:outputLabel for="weekday" value="#{msg['weekday']}" />
              <h:selectOneMenu id="weekday" value="#{scheduleBean.subject.weekday}" style="width:100%">
                  <f:selectItems value="#{scheduleBean.schedule.weekdays}" var="day" itemLabel="#{day}" itemValue="#{day}" />
              </h:selectOneMenu>

           <p:outputLabel for="teacher" value="#{msg['teacher']}" />
                            <p:inputText id="teacher" value="#{scheduleBean.subject.teacher}" required="true" />

           <p:outputLabel for="room" value="#{msg['room']}" />
                            <p:inputText id="room" value="#{scheduleBean.subject.room}" required="true" />

       </h:panelGrid>
       <h:panelGroup style="text-align: center; width: 340px; float: left">
           <p:commandButton id="addButton" styleClass="button button2" value="#{msg['save']}"   action="#{scheduleBean.save}" update="schedule :form:eventDetails" oncomplete="PF('subjectDialog').hide();" />
           <p:commandButton id="delete" styleClass="button button2"   value="#{msg['delete']}"     action="#{scheduleBean.remove(scheduleBean.subject)}" update="schedule msgs" oncomplete="PF('subjectDialog').hide();" />
           <p:commandButton id="cancel"  styleClass="button button2"  value="#{msg['cancel']}"   immediate="true"                                    oncomplete="PF('subjectDialog').hide();" /> 
       </h:panelGroup>
   </p:dialog>

1 个答案:

答案 0 :(得分:1)

不确定为什么没有为该周二行调用您的managedBeans属性,但是关于刷新对话框,通常的做法是将对话框放在主窗体之外并在对话框本身中添加inner表单:

<p:dialog widgetVar="subjectDialog" header="Neues Fach anlegen" showEffect="clip" hideEffect="clip" resizable="false">
  <h:form id="dialogForm">
     ...
  </h:form>
</p:dialog>

然后,您只需从数据表中执行update=":dialogForm"

这种做法的原因是浏览器可能会将p:对话框的内容重新定位到DOM树的其他元素(通常在任何表单元素的末尾和外部)。这会导致所有按钮和表单元素停止工作。