2012-01-13 52 views
0

我實現了selectableDataModel並擴展ListDataModel 我可以很好地看到表的內容。p:數據錶行選擇不起作用(帶單選按鈕列)

<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與內容,但它是空的。

問題是什麼?

感謝

+0

您是否注意到「sec」的更新設置爲update =「main_form」 而您的表單沒有ID? – Daniel 2012-01-13 13:27:47

回答

1

顯然,你沒有實現SelectableDataModel#getRowData()和/或getRowKey()正常。最基本的實現應該是這樣的,假設你有一個Long id代表你Product類PK:

@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()是用來返回可選擇行的行標識符。 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>