p:dataTable行选择不起作用(带单选按钮列)

时间:2012-01-13 11:27:38

标签: jsf primefaces

我实现了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包含内容,但它是空的。

问题可能是什么?

感谢

2 个答案:

答案 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?