2012-01-13 16 views
0

私はselectableDataModelを実装してListDataModelを拡張しました 私はテーブルの内容をよく見ることができます。p:dataTableの行選択が機能していません(ラジオボタン列を使用)

<h:form> 
    <p:dataTable id="selectProductTable" var="product" value="#{manageFormsView.productModel}" selection="#{manageFormsView.product}" > 
    <p:column selectionMode="single"/> 

<p:column> 
           <f:facet name="header"> 
            <h:outputText value="Urun Ismi" /> 
           </f:facet> 
           <h:outputText value="#{product.name}" /> 
          </p:column> 


      </p:dataTable> 
      <h:panelGrid columns="2"> 

       <p:commandButton action="#{manageFormsView.setSelectedProductToForm}" 
        update="main_form" 
        oncomplete="if(#{manageFormsView.errorText == 'SUCCESS'}){ selectProductDlg.hide();}" 
        value="sec"> 
       </p:commandButton> 

       <p:commandButton onclick="selectProductDlg.hide();" action="#{manageFormsView.cancelSetRequest}" 
        value="Iptal"> 
       </p:commandButton> 
      </h:panelGrid> 


    </h:form> 

が、私はsetSelectedProductToForm機能で「秒」をクリックしたときに、私はコンテンツとmanageFormsView.productを見ることを期待し、それがnullです。

何が問題なのですか?

おかげ

+0

"sec"の更新がupdate = "main_form" に設定されているのに気付かれましたか? – Daniel

答えて

1

どうやらあなたが適切SelectableDataModel#getRowData()および/またはgetRowKey()を実装していませんでした。

@Override 
public Object getRowKey(Product product) { 
    return product.getId(); 
} 

@Override 
public Product getRowData(String rowKey) { 
    Long id = Long.valueOf(rowKey); 

    for (Product product : (List<Product>) getWrappedData()) { 
     if (product.getId().equals(id)) { 
      return product; 
     } 
    } 

    return null; 
} 

getRowKey()が選択行の行識別子を返すために使用される。最も基本的な実装では、あなたのProductクラスでPKを表すLong idを持っていると仮定して、次のようになります。 getRowData()は、行識別子に関連付けられたオブジェクト全体を返すために使用されます。具体的な問題へ


無関係、ELはあなたがいないリクエストごとに、oncomplete属性はビュー単位で解決されるにそこに持っているように注意してください。それを修正することもできます。例:EL expression inside p:commandButton onclick does not update/re-render on ajax request?

1

はこれを試してみてください。

 <h:commandButton action="#{manageFormsView.setSelectedProductToForm}" 
       oncomplete="if(#{manageFormsView.errorText == 'SUCCESS'}){ selectProductDlg.hide();}" 
       value="sec"> 
       <f:ajax event="click" render="@form" /> 
    </h:commandButton> 
関連する問題