2012-04-04 62 views
0

尝试设置一个豆变量并调用设置用户海槽事件的方法,我遇到了一个问题。问题是viewParam工作(我可以请求页面上的值和它在bean中的设置),但事件preRenderComponent(也不preRenderView)没有被触发。奇怪的是,如果我注释initUser法@PostConstruct事件确实触发,但它也触发了这心不是我想要的@PostConstruct。但是,如果我删除注释它根本不输入方法。JSF preRenderComponent事件将不会触发

下面你会发现我的.xhtml和低于我的豆。我使用netbeans和Glassfish(3.0)服务器。我在这里做错了什么?

XHTML:

<f:metadata> 
     <f:viewParam name="userId" value="#{tweetBean.userId}" /> 
     <f:event listener="#{tweetBean.initUser}" type="preRenderComponent" /> 
     <f:event listener="#{tweetBean.initUser}" type="preRenderView" /> 
    </f:metadata> 

BEAN:

@Named 
    @RequestScoped 
    public class tweetBean implements Serializable 
    { 
     @Inject 
     private KwetterService service; 
     private String userId; // Has Getters + setters 

     public void initUser() 
     { 
      System.out.println("test"); 

      for (User u : service.findAll()) 
      { 
       if (u.getName().equals(userId)) 
       { 
        user = u; 
        System.out.println("User found"); 
       } 
      } 

      if (user == null) 
      { 
       System.out.println("no user found with this name"); 
       user = service.find(0); 
      } 
     } 
    } 
+0

如何将范围更改为ViewScoped? – Daniel 2012-04-04 08:29:00

+0

恐怕这不起作用,SessionScoped也不行。但我更愿意继续使用RequestScope,它应该在RequestScope中工作。 – user1312260 2012-04-04 08:32:29

+0

还没有注意到它之前...试图让它ManagedBean豆,而不是命名... – Daniel 2012-04-04 08:36:43

回答

0

试一下:

<f:metadata> 
    <f:event type="javax.faces.event.PreRenderViewEvent" listener="#{tweetBean.initUser}" /> 
</f:metadata> 

BTW:我认为,如果你使用@PostConstruct正常的生命周期回调被执行集装箱,但事件仍然没有发射......

+0

非常感谢您的支持,我的项目有一些问题,完全相同的代码在新项目中起作用。 – user1312260 2012-04-04 09:13:17