2012-01-13 4 views
0

i реализован selectableDataModel и расширяется ListDataModel Я отлично вижу содержимое таблицы.p: dataTable row select не работает (с колонкой радиокнопки)

<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» , в то время как ваша форма не имеет идентификатора? – Daniel

ответ

1

Видимо, вы не выполнили SelectableDataModel#getRowData() и/или getRowKey() правильно. Самая основная реализация будет выглядеть следующим образом, если предположить, что у вас есть Long id, представляющий ПК в своем классе Product:

@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() должен использоваться для возврата всего объекта, связанного с идентификатором строки.


Unrelated к конкретной проблеме, обратите внимание, что 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> 
Смежные вопросы