2011-04-22 104 views
0

伙计我使用jsf 2.0与春天。 我使用@PostConstruc在托管bean中注释了一个方法,但是如果在bean中没有字段连接到jsf页面,即使在jsf页面中有一个操作方法连接到@PostConstruct方法,也不会调用@PostConstruct方法豆。 预先感谢您。@PostConstruct不工作,如果只声明行动方法

的交代添加的代码:

这对我BackingManagedBean

@ManagedBean(name="utenteBean") 
@ViewScoped 
public class UtenteBean extends SupportBean implements Serializable 

虽然这是我的ControllerManagedBean

@ManagedBean(name="gestisciUtentiController") 
@ViewScoped 
public class GestisciUtentiController extends MessageSupportBean implements Serializable { 

@ManagedProperty(value="#{utenteBean}") 
private UtenteBean utenteBean; 
public void setUtenteBean(UtenteBean utenteBean) { 
    this.utenteBean = utenteBean; 
} 

    @PostConstruct 
    public void loadBean() 
    { 
     try 
     { 
      utenteBean.setUtentis(getFacadeFactory().getUtenteFacade().readAllOrdered(Utente.class, "username")); 
     } 
     catch (ApplicationException e) 
     { 
      setExceptionMessage(e.getLocalizedMessage(), e.getLocalizedMessageDetail()); 
     } 
    } 
+0

究竟如何,是'@ PostConstruct'有用的,如果你没有任何呈现视图的东西?那时你基本上没有什么准备。你有什么样的代码?什么是功能要求? – BalusC 2011-04-22 21:49:41

+0

我试图让不同类型的托管bean,例如我有ModelManagedBean具有页面和ControllerManagedBean具有操作方法的所有属性。现在我认为在ControllerManagedBean中,我必须调用postConstruct方法来初始化,例如ModelManagedBean的List对象 – 2011-04-22 21:53:33

+0

使模型成为控制器的属性。那么它不应该是'@ ManagedBean'。 – BalusC 2011-04-22 21:59:33

回答

0

http://blog.icefaces.org/blojsom/blog/default/2009/04/23/Making-distinctions-between-different-kinds-of-JSF-managed-beans/我试图用这个计算策略。你认为那种接近是不正确的? -

我不确定。该文章提到模型通常被放置在会话范围内。这实际上是一个糟糕的做法。如果会话作用域的范围是例如登录用户,并且请求作用域被绑定到窗体,则在请求作用域bean中注入会话作用域bean是有意义的。

在你的情况下,你应该让模型bean成为控制器bean的一个属性,并使用#{gestisciUtentiController.utenteBean.someProperty}而不是#{utenteBean.someProperty}

我以前的一些 “JSF设计” 的问题,你会发现他们有用的: