0

我在尝试设置 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>

豆:

    @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);
            }
        }
    }
4

1 回答 1

0

试试看:

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

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

于 2012-04-04T09:02:17.900 回答