Вызвать действие в f:viewAction при навигации с помощью p:commandButton
home.xhtml
<p:button outcome="product" value="Login Simple Button"/>
<p:commandButton value="Login" action="#{homeController.validate}" update="logindialog"/>
product.xhtml
<f:metadata> <f:viewAction action="#{productController.readProductGroup}" /> </f:metadata>
Простой p: кнопка навигации и успешно вызывает readProductGroup(); но p:commandButton этого не делает, хотя метод homeController.validate() возвращает "product" и успешно переходит к product.xhtml.
С помощью кнопки p: я не могу гибко вызывать методы сервера, использовать атрибут обновления и т. Д., Что мне нужно.
Что мне нужно, чтобы иметь возможность использовать такие атрибуты, как update, action / actionListener и т. Д. В кнопке страницы home.xhtml, и в то же время при переходе к product.xhtml должна иметь возможность вызывать функцию productController.readProductGroup в f: метаданные во время загрузки страницы.
Пожалуйста, предложите.
1 ответ
<f:viewAction>
предназначен для запуска по запросам GET, а не по запросам POST. Чтобы вызвать действия над запросами POST, вы должны использовать <h:commandXxx>
,
Если ты действительно хочешь бежать <f:viewAction>
на запросы POST тоже по какой-то причине, тогда просто установите его onPostback
приписывать true
,
<f:viewAction ... onPostback="true" />
С другой стороны, очень хорошо, что вы не очень понимаете идемпотентность, навигацию и GET по сравнению с POST. Навигация по POST считается плохой практикой. Вы можете применить шаблон POST-redirect-GET, отправив метод redirect в действии, добавив ?faces-redirect=true
Строка запроса к результату.
public void validate() {
// ...
return "product?faces-redirect=true";
}
Смотрите также Как ориентироваться в JSF? Как сделать так, чтобы URL отражал текущую страницу (а не предыдущую)
Вне зависимости от конкретной проблемы, имя метода действия оставляет у меня впечатление, что вы также не знаете, как правильно использовать валидаторы JSF. В этом случае внимательно прочитайте проверку JSF 2.0 в actionListener или методе действия.