2012-01-30 62 views
1

我想知道如何在页面加载后调用backing bean中的方法。 考虑这个scenerio 一旦用户登录成功,他的详细信息将显示在欢迎页面中。 说我有login.xhtml和welcome.xhtml 我设法豆的LoginController和DetailsController,两者都是SessionScope在页面加载时调用托管bean方法

有一个在DetailsController

称为getDetails()方法调用从构造方法不会被推荐的方法,因为我已经从数据库中getDetails()

我怎么把它当用户被重定向到welcome.xhtml这里曾经我都给重定向他应该能看到他的细节上阅读..

谢谢:)

+1

建议如何使正在调用一个getter数据库吗? – BalusC 2012-01-30 12:14:35

回答

5

查看事件例如你可以在视图渲染它调用支持Bean方法preRenderView事件:

<f:metadata> 
     <f:event type="preRenderView" listener="#{myBean.preRender}"/> 
</f:metadata> 

然后通过你的bean的预渲染方法让你在范围所需的数据。典型地,该方法将从数据库读取数据并设置在适当的范围内,例如查看范围。您的价值绑定然后将outputText或inputText组件绑定到您通过preRenderView事件创建或修改的对象。

0

正常的方法是通过某个值表达式调用此方法。
举例来说,你会有#{myBean.details.price}表达式;这会在你的支持bean上调用getDetails。

通常,如果有多个表达式引用它,您只需确保一次只能从db中获取详细信息。这很容易通过私人领域完成。

另一种技术是使用@PostConstruct。这仅适用于使用CDI(或弹簧)的情况。这将在构造函数之后调用一个方法,但在任何其他用法之前。请记住,将调用此方法,而不是在查看页面时,而是在构建bean时。对于请求范围的bean来说,这是一回事。对于会话作用域,它不是。

+0

不,我想在我的托管bean中调用方法,然后在我的POJO中设置值。因此,我的EL将像#{myBean.DetailsPOJO.price}。我不使用spring。 – enthusiastic 2012-01-30 09:41:28

+0

@learner为什么你不能在getDetailsPOJO()中处理这个问题? – 2012-01-30 12:28:36

+0

Pojos在我的应用程序中只有getter和setters.I不想在其中有任何业务逻辑.. – enthusiastic 2012-01-31 05:23:20

-1

使控制器保存方法返回的字符串

public String Save() throws DaoException 
{ 
    put your operation code here 

    return "/template/template.xhtml&faces-redirect=true"; 
} 
相关问题