托管Bean - 仅在页面加载时执行代码

cte*_*ekk 3 java jsf javabeans primefaces jsf-2

我很好奇如何让JSF只在页面加载时加载某些业务逻辑,不是在单击按钮(ActionEvent)或执行时运行此代码AjaxBehaviorEvent.

我的bean在@RequestScoped使用JSF 2.1和Primefaces.

因为ActionEventAjaxBehaviorEvent被称为事后我不知道该怎么告诉豆在@PostConstruct那是因为事件的调用.

是因为豆子放在错误的范围内?

Bal*_*usC 7

仅在页面加载 GET请求时执行代码

如果FacesContext#isPostback()返回,只需签入(post)构造函数false.

@PostConstruct
public void init() {
    if (!FacesContext.getCurrentInstance().isPostback()) {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

在即将推出的JSF 2.2中,您可以使用new <f:viewAction>来替代它.

<f:viewAction action="#{bean.init}" onPostback="false" />
Run Code Online (Sandbox Code Playgroud)

是因为豆子放在错误的范围内?

取决于具体的功能要求.另请参见如何选择正确的bean范围?


我遇到了ViewScoped的严重问题.它总是需要一个序列化的类,我发现它很烦人;) - 另外它会导致'java.sql'出现问题

这表明您自己的代码设计存在问题,而不是视图范围.JDBC代码不属于JSF托管bean.如JDBC资源Connection等应该永远,永远被声明为实例变量.