我有一个页面拆分为3。第一部分是绑定到mBean(MLeft)的链接列表,第二部分是我所在页面的当前mBean(MCenter。问题是,当呈现页面并评估链接时,MLeft是在MCenter之前创建的(因为在页面的早期发现),而MCenter没有机会在MLeft中插入链接,因此不会显示任何链接。我使用引用dummy
属性(即empty string
)的输出文本在链接之前调用了MCenter
我不喜欢这种变通方法,我过去在Seam和@Out
中也遇到过这个问题,我就是这样解决的。有更好的方法吗?
也许您可以使用以下方法:
<f:view beforePhase="#{userMB.verifyUser}" />
该方法将在页面加载时调用
我认为您需要使用模板:
template.xhtml
<ui:composition>
<h:head>
<title>
<ui:insert name="title" />
</title>
<h:outputStylesheet name="css/haleczander.css" />
</h:head>
<h:body>
<div class="left">
<ui:include src="static_links.xhtml />
<ui:repeat value="#{links}" var="link">
<h:outputLink value="#{link}">#{link}</h:outputLink>
</ui:repeat>
</div>
<div class="center">
<ui:insert name="content" />
</div>
</h:body>
</ui:composition>
content1.xhtml
<ui:composition template="template.xhtml">
<ui:define name="title">
Content page 1
</ui:define>
<ui:param name="links" value="#{middle.links}" />
<ui:define name="content">
Blah blah 1
</ui:define>
</ui:composition>
我假设链接是一个列表或字符串数组,但你可以做任何事情:一个自定义MyLink对象的列表。。。(只要有合适的吸气剂)
你也可以用任何你喜欢的东西替换middle.links,事件一个方法调用,比如#{middle.getLinks(page1)}
只需将Center
设为Left
的托管属性即可。例如
@ManagedBean
@RequestScoped
public class Left {
@ManagedProperty(value="#{center}")
private Center center;
@PostConstruct
public void init() {
// Initialize links based on Center here.
}
// ...
}