JSF: проблема навигации (Ajax / Non-Ajax) - PullRequest
2 голосов
/ 06 июля 2011

Когда нажата следующая кнопка (PrimeFaces)

<p:commandButton value="Search"
                 actionListener="#{personController.searchPersons}"
                 update="resultTable"/>

Я загружаю список объектов и отображаю их в таблице на текущей странице. Это делается с помощью вызова Ajax.

Теперь я хотел бы сделать следующее: если найден только один объект, не обновляйте таблицу результатов, а ссылайтесь непосредственно на «страницу сведений». (например, detail.xhtml)

Как это можно сделать?

Я знаю, что могу управлять навигацией через возвращаемое значение моего searchPersons() метода. Но это не работает так, как должно. Я думаю, что это связано с update="resultTable" моей кнопки. Но в настоящее время я не знаю, как решить эту проблему ...

1 Ответ

1 голос
/ 06 июля 2011

Вы можете ввести JS в атрибуте oncomplete. Он будет выполнен, когда действие компонента и частичное обновление будут завершены. Вы можете изменить расположение окна в JS, назначив window.location новый URL.

Вот случайный стартовый пример, предполагая, что у вас есть таблица персон с идентификатором persons и что ссылка детализации выглядит примерно как <a class="detail" href="detail.xhtml?id=123"> где-то в строке таблицы.

oncomplete="var $persons = jQuery('#persons tbody tr'); if ($persons.length == 1) window.location = $persons.find('a.detail').attr('href');"
...