我想知道在页面加载后如何在辅助bean中调用方法。 考虑一下这个场景 用户登录成功后,其详细信息将显示在欢迎页面中。 说我有login.xhtml和welcome.xhtml 我有托管bean LoginController和DetailsController,两者都在SessionScope
DetailsController中有一个名为getDetails()的方法
从构造函数中调用方法不是推荐的方法,因为我在getDetails()中读取了数据库
当用户重定向到welcome.xhtml时如何调用它,一旦重定向,他应该能够看到他的详细信息..
感谢:)
答案 0 :(得分:5)
查看事件,例如你可以有一个preRenderView事件,它在渲染视图时调用支持bean方法:
<f:metadata>
<f:event type="preRenderView" listener="#{myBean.preRender}"/>
</f:metadata>
然后通过bean上的preRender方法获取所需的数据。通常,此方法将从数据库读取数据并设置在适当的范围内,例如查看范围。你的价值绑定,例如然后在outputText或inputText组件上绑定到您通过preRenderView事件创建或修改的对象。
答案 1 :(得分:0)
通常的方法是通过某个值表达式调用此方法
比如说,你会得到#{myBean.details.price}
表达式;这会在你的支持bean上调用getDetails。
通常,如果有多个表达式引用它,您将需要确保只从db获取一次详细信息。这可以通过私人领域轻松完成。
另一种技术是使用@PostConstruct。这仅适用于使用CDI(或弹簧)的情况。这将在构造函数之后但在任何其他用法之前调用方法。请记住,将调用此方法,而不是在查看页面时,而是在构造bean时。对于请求范围的bean来说,这是一回事。对于会话作用域,它不是。
答案 2 :(得分:-1)
在返回String
的控制器中创建Save方法public String Save() throws DaoException
{
put your operation code here
return "/template/template.xhtml&faces-redirect=true";
}