2012-01-13 56 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>