Я предполагаю, что SearchBean.input
будет связан с полем ввода :
public class SearchBean implements Serializable {
private String input = null;
Примерно так:
<h:inputText value="#{searchBean.input}" />
Если так, то этобудет нулевым:
@PostConstruct
public void init()
{
System.out.println("Value: " + searchBean.getInput());
}
Но , если предполагается, что значение было установлено, при вызове этого метода оно не будет нулевым:
public String Submit() {
return null;
}
Изображение от Ричарда Хайтоуэра JSF для неверующих: жизненный цикл приложения JSF .
Причина заключается в том, как жизненный цикл JSFworks:
- Когда
#{searchBean...}
впервые разрешен и обнаружен, что он не существует: - Создается экземпляр компонента
- Все инъекции зависимостей выполняются (нетлюбой в этом случае)
- @ метод PostConstruct вызывается
- Компонент помещается в область действия
- Предполагая, что этапы Apply Request Values и Validations пройдены успешно,
SearchBean.setInput(String)
вызывается на этапе обновления значений модели SearchBean.Submit()
вызывается на этапе вызова приложения
This process определен в спецификации JSF .
Теперь, если SearchBean.input
было введено непосредственно из карты параметров, он не будет нулевым во время @PostConstruct
:
@ManagedProperty(value = "#{param.someParamName}")
private String input;
Однако в этом нет никаких реальных преимуществ - вы пропускаете любую проверку ввода и не можете использовать SearchBean.input
в качестве привязки поля, поскольку она будет перезаписана на этапе обновления значений модели модели..
Метод SearchBean.Submit()
- это то место, куда должна идти логика вашего приложения для выполнения поиска.