禁用数据表中的特定按钮jsf

时间:2012-09-07 23:45:57

标签: jsf button datatable

我有一个包含两列的数据表 - 标题和动作 标题从托管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>

1 个答案:

答案 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());
    }
}