我不能鑽嘴魚科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
我上面給出的例子是一個簡化 - 我實際上使用了一個模板,這樣我的每個頁面都可以擁有自己的動態標題: