2

Title と Action の 2 つの列を持つデータ テーブルがあります。タイトルはマネージド Bean のリストから入力され、リスト内の各タイトルについて、データ テーブルには [Action] 列の下に [Confirm] というボタンがあります。ユーザーが [確認] ボタンをクリックすると、ダイアログが表示され、追加情報と [送信] という別のボタンが表示されます。

ユーザーがそのダイアログ内で [送信] ボタンを押すと、バッキング Bean に変数 confirmDate が設定されます。confirmDate は null ではありません。メイン データ テーブルの [アクション] 列の下にある特定の [確認] ボタンを無効にする必要があります。現在、無効にすると、すべての確認ボタンが無効になります。選択した確認ボタンのみを無効にするにはどうすればよいですか。これについてのあなたの助けに本当に感謝します.

メインデータテーブル

<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 に答える