我有一个包含两列的数据表 - 标题和动作 标题从托管bean中的列表填充,对于列表中的每个标题,数据表在“操作”列下有一个名为“确认”的按钮。 当用户单击“确认”按钮时,将显示一个对话框,其中包含其他信息和另一个名为“提交”的按钮。
如果用户点击该对话框中的Submit按钮,则在backing bean中设置变量confirmDate,confirmDate不为null,我需要禁用主数据表中Action列下的特定Confirm按钮。现在,如果我禁用它,所有的确认按钮都会被禁用。如何仅禁用所选的确认按钮。真的很感谢你的帮助。
主要数据表
<h:panelGrid id="notificationList" width="100%">
<h:panelGroup >
<p:dataTable var="dt" value="#
{myBean.listAll}" id="titles" rowKey="#{dt.id}">
<f:facet name="header">
<h:outputText value = "Title List"/>
</f:facet>
<p:column headerText ="Title">
<h:outputText value="#{dt.title}"/>
</p:column>
<p:column headerText="Action">
<p:commandButton id="nID"
value="Confirm"
oncomplete="myDialog.show();"
process="@this"
disabled= "#{not empty dt.confirmDate}
update="@form">
<f:setPropertyActionListener value="#{dt}" target="#
{myBean.selectedTitle}"/>
</p:commandButton>
</p:column>
</p:dataTable>
</h:panelGroup>
</h:panelGrid>
答案 0 :(得分:0)
很难说你的代码,也许你通过listAll检索的所有dt
对象都是相同的对象。你如何设置清单?
无论如何这应该有效(简化):
<p:dialog widgetVar="dlg">
<p:commandButton value="Submit" action="#{myBean.updateNotificationConfirmDate}" oncomplete="dlg.hide()"
update="notificationList" />
</p:dialog>
<p:dataTable id="notificationList" var="dt" value="#{myBean.tableData}">
<p:column>
<p:commandButton value="Confirm" process="@this" disabled="#{!empty dt.confirmDate}" update="@form"
oncomplete="dlg.show();">
<f:setPropertyActionListener value="#{dt}" target="#{myBean.selectedTitle}" />
</p:commandButton>
</p:column>
</p:dataTable>
支持bean(无论你的DT是什么:):)
@ManagedBean
@ViewScoped
public class MyBean {
private List<DT> tableData = new ArrayList<DT>();
private DT selectedTitle;
public MyBean() {
tableData.add(new DT(1L, "title1", null));
tableData.add(new DT(2L, "title2", null));
tableData.add(new DT(3L, "title3", null));
tableData.add(new DT(4L, "title4", null));
}
public DT getSelectedTitle() {
return selectedTitle;
}
public void setSelectedTitle(DT selectedTitle) {
this.selectedTitle = selectedTitle;
}
public List<DT> getTableData() {
return tableData;
}
public void updateNotificationConfirmDate() {
selectedTitle.setConfirmDate(Calendar.getInstance());
}
}