2

我有一个包含两列的数据表 - Title 和 Action 标题是从托管 bean 中的列表填充的,对于列表中的每个标题,数据表在 Action 列下都有一个名为 Confirm 的按钮。当用户单击“确认”按钮时,会显示一个对话框,其中包含附加信息和另一个名为“提交”的按钮。

如果用户在该对话框中点击 Submit 按钮,则在 backing bean 中设置了一个变量 confirmDate,confirmDate 不为空,我需要禁用主数据表中 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>
4

1 回答 1

0

很难用您的代码说,也许您dt通过 listAll 检索的所有对象都是相同的对象。你如何设置列表?

无论如何,这应该有效(简化):

<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());
    }
}
于 2012-09-10T21:20:31.217 回答