Primefaces commandButton в dataTable - не может установить свойство в бине или не может обновить таблицу - PullRequest
0 голосов
/ 03 декабря 2011

Я начинаю с примеров:

Example 1

<p:dataTable>
...
<p:column headerText="Actions" style="text-align:center; width:100px;">
    <p:commandLink value="Delete" action="#{bean.delete}"
        update="data">
        <f:setPropertyActionListener target="#{bean.key}" value="#{item.key}" />            
    </p:commandLink>
</p:column>
...
</p:dataTable>

Example 2

<p:dataTable>
...
<p:column headerText="Actions" style="text-align:center; width:100px;">
    <p:commandLink value="Delete" actionListener="#{bean.delete}"
        update="data">
        <f:setPropertyActionListener target="#{bean.key}" value="#{item.key}" />            
    </p:commandLink>
</p:column>
...
</p:dataTable>

В первом случае (ссылка на команду с action)свойство bean.key установлено правильно, но таблица не отображается снова после удаления элемента.

Во втором случае (ссылка на команду с actionListener) свойство не установлено, и я получаю NullPointerException,Но у меня есть другая командная ссылка с actionListener вне таблицы, и она отлично работает и обновляет таблицу.

Как сделать первый случай для рендеринга таблицы после удаления элемента или каким-либо образом решить проблему?

Ответы [ 3 ]

1 голос
/ 15 декабря 2011

Есть ли шанс, что у вас есть два forms? p:commandLink находится в первом form, а компонент рендеринга (компонент с id="data") - во втором form?.
Затем вы должны присвоить id второму form, и ваша команда linkLink должна выглядеть как <p:commandLink... update=":secondformid:data">.
Если вы используете PrimeFaces 3.0, вы можете прочитать больше в Руководстве пользователя PrimeFaces, глава 4, раздел 4.1.2 Частичный рендеринг и обработка-> Использование идентификаторов.
http://www.primefaces.org/documentation.html
Извините за мой плохой английский.

1 голос
/ 15 декабря 2011

Подсказка (или уловка):
Вместо:

<p:commandLink value="Delete" action="#{bean.delete}" update="data">
    <f:setPropertyActionListener target="#{bean.key}" value="#{item.key}" />            
</p:commandLink>  

Вы можете использовать:

<p:commandLink value="Delete" action="#{bean.delete}" actionListener="#{bean.setKey(item.key)}" update="data" />  

Таким образом, вы используете actionListener для явного вызова метода установки иустановить свойство.

1 голос
/ 06 декабря 2011

попробуйте добавить атрибут prependId=false к тегу формы, который оборачивает компонент в id="update"

<h:form prependId="false">

совет: добавьте атрибут process="@this" к вашему <p:commandLink value="Delete" ...> в этом случае вы отправляете только один компонент вместо всех компонентов в форме

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...