Рассмотрим страницу webapp / myPage.xhtml :
...
<h:form id="myForm">
...
<h:selectOneMenu id="..." required="true" value="#{myController.aValue}">
<f:selectItems value="#{...}" var="..." itemValue="#{...}" itemLabel="#{...}"/>
</h:selectOneMenu>
...
<h:commandButton value="Go for it!" action="#{myController.goForIt(...)}"/>
...
</h:form>
...
Действие кнопки привязано к методу контроллера MyController.goForIt () :
@ManagedBean(name = "myController")
@RequestScoped
public class MyController {
public String goForIt(...){
if (myCondition){
try {
FacesContext.getCurrentInstance().getExternalContext()
.redirect("http://www.myTarget.com/thePage.html");
} catch (IOException e) {
...
}
}
return "myPage.xhtml"
}
}
Мой первый вопрос: Имеет ли смысл вышесказанное?Это правильный способ использования redirect ()?
Я хочу перенаправить пользователя на http://www.myTarget.com/thePage.html
в случае, если myCondition
имеет значение true.Если myCondition
ложно, ему придется остаться на myPage.xhtml
.
Если так, я бы хотел лучше понять, что происходит ... При использовании Live HTTP Headers в FirefoxЯ заметил, что при нажатии кнопки
- a POST для webapp / myPage.xhtml
- сервер отвечает с 302 Перемещено временно - Местоположение: www.myTarget.com/thePage.html
- браузер ПОЛУЧИТ www.myTarget.com / thePage.html
Пока что Это ожидаемое поведение?
Что меня сейчас раздражает, так это то, что вызывается webapp / myPage.xhtml .Точнее говоря, preRenderView -event вызывается здесь снова.(У меня есть немного кода в слушателе preRenderView, который должен быть выполнен только один раз.)
Имеет ли смысл приведенное выше?Кто-нибудь видит способ улучшить это?
Спасибо!J.