如何在导航到页面时首先初始化某个MBean



我有一个页面拆分为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.
    }
    // ...
}

相关内容

  • 没有找到相关文章

最新更新