我在尝试设置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);
}
}
}
答案 0 :(得分:0)
试试:
<f:metadata>
<f:event type="javax.faces.event.PreRenderViewEvent" listener="#{tweetBean.initUser}" />
</f:metadata>
顺便说一句:我认为如果你使用@PostConstruct
正常生命周期 - 回调是由容器执行的,但事件仍未触发......