我正在尝试使用<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>
答案 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树的其他元素(通常在任何表单元素的末尾和外部)。这会导致所有按钮和表单元素停止工作。