Java 页面加载时调用托管bean方法

Java 页面加载时调用托管bean方法,java,jsf-2,Java,Jsf 2,我想知道在页面加载后如何在backingbean中调用方法。。 考虑一下这个风景 用户登录成功后,其详细信息将显示在欢迎页面中。 假设我有login.xhtml和welcome.xhtml 我已经管理了beans LoginController和DetailsController,它们都在SessionScope中 在DetailsController中有一个名为getDetails的方法 从构造函数调用该方法不是推荐的方法,因为我已经在getDetails中从DB中读取了 当用户被重定向到we

我想知道在页面加载后如何在backingbean中调用方法。。 考虑一下这个风景 用户登录成功后,其详细信息将显示在欢迎页面中。 假设我有login.xhtml和welcome.xhtml 我已经管理了beans LoginController和DetailsController,它们都在SessionScope中

在DetailsController中有一个名为getDetails的方法

从构造函数调用该方法不是推荐的方法,因为我已经在getDetails中从DB中读取了

当用户被重定向到welcome.xhtml时,我如何调用它,一旦他被重定向,他应该能够看到他的详细信息


谢谢:

通常的方法是由某个值表达式调用此方法。 例如,假设有{myBean.details.price}表达式;这将调用支持bean上的getDetails

通常,如果有多个表达式引用db,则需要确保只从db获取一次详细信息。这可以通过一个私有字段轻松完成


另一种技术是使用@PostConstruct。这仅在使用CDI或spring时有效。这将在构造函数之后但在任何其他使用之前调用方法。请记住,此方法不是在查看页面时调用的,而是在构造bean时调用的。对于请求范围的bean,这是相同的。对于会话作用域,它不是。

通常的方法是由某个值表达式调用此方法。 例如,假设有{myBean.details.price}表达式;这将调用支持bean上的getDetails

通常,如果有多个表达式引用db,则需要确保只从db获取一次详细信息。这可以通过一个私有字段轻松完成


另一种技术是使用@PostConstruct。这仅在使用CDI或spring时有效。这将在构造函数之后但在任何其他使用之前调用方法。请记住,此方法不是在查看页面时调用的,而是在构造bean时调用的。对于请求范围的bean,这是相同的。对于会话作用域,它不是。

检查事件,例如,您可以有一个preRenderView事件,该事件在呈现视图时调用支持bean方法:

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

然后通过bean上的preRender方法获取范围中所需的数据。通常,此方法将从数据库读取数据,并设置在适当的范围内,例如视图范围。您的值绑定(例如outputText或inputText组件上的值绑定)将仅绑定到您通过preRenderView事件创建或修改的对象。

检查事件,例如,您可以拥有一个preRenderView事件,该事件在呈现视图时调用支持bean方法:

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

然后通过bean上的preRender方法获取范围中所需的数据。通常,此方法将从数据库读取数据,并设置在适当的范围内,例如视图范围。您的值绑定(例如outputText或inputText组件上的值绑定)将仅绑定到您通过preRenderView事件创建或修改的对象。

在返回字符串的控制器中创建保存方法

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

    return "/template/template.xhtml&faces-redirect=true";
}

在返回字符串的控制器中生成Save方法

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

    return "/template/template.xhtml&faces-redirect=true";
}

不,我想在我的托管bean中调用方法,然后在我的POJO中设置值。我没有使用spring。@学习者为什么你不能在getDetailsPOJO中处理这个问题?我应用程序中的POJO只有getter和setter。我不想在它们中包含任何业务逻辑。。不,我想在我的托管bean中调用方法,然后在我的POJO中设置值。所以我的EL将类似于{myBean.DetailsPOJO.price}。我没有使用spring。@学习者为什么你不能在getDetailsPOJO中处理这个问题?我应用程序中的Pojo只有getter和setter。我不想在它们中包含任何业务逻辑。如何更推荐在getter中调用DB?如何更推荐在getter中调用DB?