Рассмотрим следующую страницу (заголовок и материал для краткости опущены):
<h:body>
<h:form>
<h:inputText
id="theInput"
value="#{theBean.text}">
<f:ajax render="theButton" />
</h:inputText>
<h:commandButton
id="theButton"
value="Result"
disabled="#{theBean.disabled}"
action="result" />
</h:form>
</h:body>
TheBean
выглядит так:
@Named
@RequestScoped
public class TheBean {
String text;
public TheBean() {
this.text = "test";
}
public String getText() {
return this.text;
}
public void setText(String text) {
this.text = text;
}
public boolean isDisabled() {
return this.text.equals("test");
}
}
result.xhtml
- это заполнитель, отображающий некоторыестатический текст.
Идея состоит в том, чтобы включить кнопку только в том случае, если введенный текст действителен (в этом случае отличается от значения по умолчанию).Это работает, и кнопка правильно включена, если я ввожу что-то отличное от test
, но когда я нажимаю на кнопку, она не переходит на result
.Однако, это работает, если я делаю одно из следующего:
- Я делаю кнопку всегда включенной.Это сбивает с толку меня, потому что в примере выше кнопка правильно включена, она только не переходит на следующую страницу.Почему это изменится, если я оставлю его включенным все время?
- Я изменяю область действия
TheBean
на @SessionScoped
.Я тоже этого не понимаю.Как может область действия компонента поддержки влиять на навигацию по страницам?Все остальное в примере, кажется, работает точно так же с @RequestScoped
.
Я бы действительно хотел оставить TheBean
в области запроса.Есть ли способ заставить навигацию работать, не ограничивая сессию?