Отправить форму JSF, используя GET
Как отправить форму на ту же страницу и использовать параметры GET?
Содержание страницы JSF:
<f:metadata>
<f:viewParam name="item1" value="#{bean.item1}"/>
<f:viewParam name="item2" value="#{bean.item2}"/>
</f:metadata>
...
<h:form>
<h:inputText value="#{bean.item1}"/>
<h:inputText value="#{bean.item2}"/>
<h:button value="Submit" >
<f:param name="item1" value="#{bean.item1}"/>
<f:param name="item2" value="#{bean.item2}"/>
</h:button>
</h:form>
Если я запрашиваю страницу: form.jsf? Item1=foo&item2=bar, она заполняет текстовые поля, но отправка формы сама по себе, похоже, не работает.
2 ответа
Замещать <h:button>
от
<h:commandButton value="Submit" action="form?faces-redirect=true&includeViewParams=true"/>
Он эффективно запускает PRG (Post-Redirect-Get), который будет включать <f:viewParam>
параметры в строке запроса. Следует отметить, что целевая страница должна иметь точно такой же <f:viewParam>
,
Другое решение заключается в использовании простого HTML <form>
вместо <h:form>
, дать входным элементам id
сопоставление имени параметра и использование простого <input type="submit">
, Конечно, вы также можете использовать простой HTML <input type="text">
Вот.
<form>
<h:inputText id="item1" value="#{bean.item1}"/>
<h:inputText id="item2" value="#{bean.item2}"/>
<input type="submit" value="Submit" />
</form>
Вы все еще должны держать <f:viewParam>
в обе стороны. Вам нужно только понять, что преобразование / проверка не может быть сделано в этой форме, они должны быть выполнены через <f:viewParam>
на целевой странице.
Смотрите также:
Вы также можете зарегистрировать NavigationHandler
он обрабатывает ключевое слово типа "self" и перенаправляет в текущее представление и добавляет необходимые параметры запроса.