我实现了selectableDataModel并扩展了ListDataModel 我可以很好地看到表的内容。
<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
函数中的'sec'时,我希望看到manageFormsView.product
包含内容,但它是空的。
问题可能是什么?
感谢
答案 0 :(得分:1)
试试这个:
<h:commandButton action="#{manageFormsView.setSelectedProductToForm}"
oncomplete="if(#{manageFormsView.errorText == 'SUCCESS'}){ selectProductDlg.hide();}"
value="sec">
<f:ajax event="click" render="@form" />
</h:commandButton>
答案 1 :(得分: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()
用于返回与行标识符关联的整个对象。
无关,请注意oncomplete
属性中的EL是基于每个视图解决的,而不是基于每个请求。您可能也想解决这个问题。另请参见示例EL expression inside p:commandButton onclick does not update/re-render on ajax request?