我不能钻嘴鱼科2.0.2〜2.0.6和2.1.1重现此。我用下面的测试豆
@ManagedBean
@RequestScoped
public class Bean {
private String title = "default";
public void preRenderView(ComponentSystemEvent event) {
title = "newtitle";
}
public String getTitle() {
return title;
}
}
及以下观点:
<!DOCTYPE html>
<html lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<f:event type="preRenderView" listener="#{bean.preRenderView}" />
<h:head>
<title>#{bean.title}</title>
</h:head>
<h:body>
<h1>Peek-a-boo</h1>
</h:body>
</html>
而且还有以下主模板
<!DOCTYPE html>
<html lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<f:event type="preRenderView" listener="#{bean.preRenderView}" />
<h:head>
<title><ui:insert name="title">Default title</ui:insert></title>
</h:head>
<h:body>
<ui:insert name="content">Default content</ui:insert>
</h:body>
</html>
这一定义
<ui:composition template="/template.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<ui:define name="title">
#{bean.title}
</ui:define>
<ui:define name="content">
<h1>Peek-a-boo</h1>
</ui:define>
</ui:composition>
所有作品同样地即在所有情况下,标题变为newtitle
。模板中放置<f:event>
的位置也无关紧要。头部,身体内部,主模板或模板定义之前。
可能问题在于你如何调用preRenderView
。上面的例子应该给你一个良好的开端,以进一步建立和实践你的实际问题。
无法在Mojarra 2.0.3或2.1.1上重现您的问题。您使用的是JSF impl/version? – BalusC 2011-06-08 16:42:40
我使用的是GlassFish 3.1,我认为它与Mojarra 2.1一起提供。 – Ryan 2011-06-08 16:45:39
我上面给出的例子是一个简化 - 我实际上使用了一个模板,这样我的每个页面都可以拥有自己的动态标题: