JSF preRenderComponent事件不会触发

时间:2012-04-04 08:22:12

标签: java jsf-2 cdi

我在尝试设置bean变量并调用方法来设置用户通过事件时遇到了问题。问题是viewParam工作(我可以请求页面上的值及其在bean中的设置),但事件preRenderComponent(也不是preRenderView)没有被触发。奇怪的是,如果我用@PostConstruct注释initUser方法,事件触发,但它也会触发@PostConstruct,这不是我想要的。但是,如果我删除注释,它根本不会进入该方法。

下面你会找到我的.xhtml以及我的bean下面。我正在使用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);
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

试试:

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

顺便说一句:我认为如果你使用@PostConstruct正常生命周期 - 回调是由容器执行的,但事件仍未触发......