Отправить форму 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&amp;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" и перенаправляет в текущее представление и добавляет необходимые параметры запроса.

Другие вопросы по тегам