Ваша конкретная проблема вызвана тем, что JSF
отправляет по умолчанию текущий URL-адрес запроса без какой-либо строки запроса. Посмотрите ближе на сгенерированный вывод HTML, вы увидите
. Таким образом, вам явно нужно будет включать эти параметры запроса самостоятельно. Существует несколько способов решить эту проблему. Если вы не отправляли перенаправление, вы можете просто добавить их в виде скрытых входов в форму JSF.
...
Только эти параметры не появятся в URL-адресе в адресной строке браузера. Это не проблема, если вы используете только использование ajax на той же странице.
, кстати, не подходит, поскольку он смутно потеряет свое значение, когда в форме появляется ошибка преобразования или проверки.
Чтобы заставить их снова появиться в URL-адресе, вам нужно
и includeViewParams
. Чтобы работать includeViewParams
, вам нужно объявить следующее как на исходной странице agreement.xhtml
...
... и целевой странице generated.xhtml
:
Теперь вы можете отправить перенаправление, включая параметры представления, следующим образом:
public String generateMethod() {
// ...
return "generated?faces-redirect=true&includeViewParams=true";
}
Обратите внимание, что bean должен быть @ViewScoped
, чтобы поддерживать эти параметры между открытием страницу с формой и отправкой формы, а также ошибок проверки. В противном случае, если вы придерживаетесь компонента @RequestScoped
, вы должны сохранить их как
в компонентах команды:
Невозможно установить их для
внутренних компонентов ввода, ваш bean должен быть действительно @ViewScoped
.
В качестве альтернативы, если вы уже используете библиотеку утилиты JSF OmniFaces , то вы также можете просто заменить
на
следующим образом (см. также пример демонстрации ):
Это в основном все. Это приведет к генерации с включенной текущей строкой запроса.
Эти параметры запроса затем доступны только на карте параметров запроса формы submit. Вам не нужны дополнительные метаданные / viewparams, и вам также не нужно отправлять перенаправление, и ваш bean-компонент может быть сохранен @RequestScoped
, если это необходимо.
public String generateMethod() {
// ...
return "generated";
}
Или, если вы используете библиотеку «симпатичного URL», такую как PrettyFaces или FacesViews или, возможно, что-то домашнее, и намерены отправить точно так же, как и в адресной строке браузера, тогда вы можете использовать useRequestURI
.