p: выбор строки dataTable не работает (со столбцом переключателей) - PullRequest
0 голосов
/ 13 января 2012

я реализовал 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>

но когда я нажимаю 'sec' в функции setSelectedProductToForm, я ожидаю увидеть manageFormsView.product с содержимым, но оно равно нулю.

в чем может быть проблема?

спасибо

Ответы [ 2 ]

1 голос
/ 13 января 2012

Очевидно, вы не реализовали SelectableDataModel#getRowData() и / или getRowKey() должным образом. Самая базовая реализация будет выглядеть следующим образом, при условии, что у вас есть Long id, представляющий PK в вашем 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() должен использоваться для возврата всего объекта, который связан с идентификатором строки.


Не имеет отношения к конкретной проблеме, обратите внимание, что EL, который есть в атрибуте oncomplete, разрешается для каждого просмотра, а не для запроса. Возможно, вы захотите это исправить. См. Также, например, Выражение EL внутри p: commandButton onclick не обновляет / повторно отображает запрос ajax?

1 голос
/ 13 января 2012

попробуйте это:

     <h:commandButton action="#{manageFormsView.setSelectedProductToForm}"
                oncomplete="if(#{manageFormsView.errorText == 'SUCCESS'}){ selectProductDlg.hide();}"
                value="sec">
               <f:ajax event="click" render="@form" />
     </h:commandButton>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...