JSF – изменение действия для h:commandButton (2.0)
Вопрос
Я новичок в JSF 2.0.В последней версии я понимаю, что если я хочу изменить правила о том, «что отправлять клиенту», мне просто нужно настроить face-config.xml.
Теперь, в версии 2.0, как можно управлять действием?Например, если у меня есть это в index.xhtml
<h:commandButton id="submit" value="submit" action="response" />
и мне нужно вызвать страницу с именем response.html (не xhtml) или страницу, помещенную в /folder/response.html, или что-то еще?Как это сделать?Я знаю, что JSF 2.0 очень гибок в этих вопросах (концепция ссылок href избита).Думаю, я смогу справиться с этим с помощью других методологий, верно?
Решение
А action
могу указать на две вещи:
Выражение метода
action="#{bean.methodname}"
где метод выглядит так:@ManagedBean @RequestScoped public class Bean { public String methodname() { // Do some business task here. return "response"; } }
После выполнения метода действие фактически будет содержать возвращаемое значение метода, например:
action="response"
.Вы также можете контролировать результат «динамически» обычным способом Java:
public String methodname() { if (someCondition) { return "somepage"; } else { return "anotherpage"; } }
В зависимости от результата условия действие закончится так:
action="somepage"
илиaction="anotherpage"
Еще одна страница XHTML в такой же папку как текущую страницу XHTML.Вам просто нужно указать имя файла:
action="response"
.
В любом случае он перейдет на страницу XHTML, созданную outcome + ".xhtml"
где outcome
значение действия (например, response.xhtml
, somepage.xhtml
или anotherpage.xhtml
), который должен находиться в той же папке, что и файл XHTML, содержащий h:commandButton
.
Вам не нужно ничего настраивать в faces-config.xml
для этого.Раньше, во времена JSF 1.x, вам нужно было определить <navigation-case>
для этого.
Смотрите также:
- Нам не нужны никакие вонючие лица-config.xml! — блог ведущего разработчика Mojarra.