使用JSF2.0在页面加载上使用参数初始化支持Bean
我试图在页面加载时初始化一个支持bean。已经寻找了许多解决方案,但大多数都使用链接、按钮或根本没有参数 场景: 客户登录到一个站点,然后应在下一页上查看其所有数据 支持bean:使用JSF2.0在页面加载上使用参数初始化支持Bean,jsf,jsf-2,Jsf,Jsf 2,我试图在页面加载时初始化一个支持bean。已经寻找了许多解决方案,但大多数都使用链接、按钮或根本没有参数 场景: 客户登录到一个站点,然后应在下一页上查看其所有数据 支持bean: loginDetailsController-支持 登录过程。可以访问用户的 密码和用户名。背豆 用于Login.xhtml customerController-访问 其余的用户详细信息。它还有一个customer\u id字段。这是后盾 对于Home.xhtml。可以完全从客户id初始化customerContr
#{loginDetailsController.customer_id}
是否有方法在页面加载时使用上述值初始化customerController
问候,
DanielJSF2.0提供了preRender支持,可以解决您的问题 JSF2包含一个PreRenderViewEvent,它是在视图参数完成处理之后,但在视图渲染之前触发的。可以使用标记注册预渲染视图侦听器,例如:
<f:metadata>
<f:viewParam name="foo" value="#{bean.foo}"/>
<f:event type="preRenderView" listener="#{bean.doSomething}"/>
</f:metadata>
您的bean的范围是什么?在任何情况下,标记为 创建bean时,将调用一次注释
@ManagedBean
@ViewScoped
public class LoginDetailsController() {
private String customer_id;
// getters and setters for customer_id
@PostConstruct
public void init() {
this.customer_id = fetch_the_value_from_somewhere;
}
}
如果希望页面始终执行此方法,不管bean是否已创建,请按照Tarun的建议使用。但请注意,每次呈现页面时都会触发此事件;即使用户刷新页面
如果要使用customerController
中的LoginDetailsController
中的该值,可以按如下方式注入该值
@ManagedBean
@ViewScoped
public class CustomerController() {
@ManagedProperty(value="#{loginDetailsController}")
private LoginDetailsController loginDetailsController;
private String customer_id;
// getters and setters for customer_id
@PostConstruct
public void init() {
this.customer_id = loginDetailsController.getCustomer_id();
}
我就是这样解决的: 因为LoginDetailsController是会话作用域-客户id始终初始化 所以我补充道
@ManagedProperty(value="#{loginDetailsController.customer_id}")
private String customer_id;
Plus-客户id的获取者和设置者
在LoginDeailsController上,正如Nikhil所说,有一点变化。
然后,可以在Home.xhtml上使用{customerController.customer_id}
和customerController的其余初始化元素
谢谢大家! 谢谢。仍然不知道如何将参数从一个支持bean传递到另一个。也许我错过了什么。两个都是会话范围。我获取的托管bean customerController的
loginDetailsController不存在。
。你能写下JSF应该是什么样子吗?它是相同的代码,但是@SessionScoped
而不是@ViewScoped
。哦,我想你是想在你的页面上使用#{logindetailscocontroller.customer\u id},它的支持bean是CustomerController。您可能还没有为loginDetailsController定义getter和setter(即使上面的代码也不包含)。因此出现了错误。您应该引用#{customerController.customer_id}属性,而不是#{logindetailscocontroller.customer_id}