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

时间:2011-06-11 10:00:02

标签: jsf dynamic jsf-2 operator-precedence

我有一个页面拆分为3.第一部分是绑定到mBean( MLeft )的链接列表,第二部分是当前的mBean( MCenter )我所在的页面.MCenter将数据插入MLeft,以便第一部分的链接自定义到我当前所在的页面。问题是当页面被渲染并且链接被评估时 MLeft在MCenter之前创建(因为在页面的前面找到),MCenter没有机会在 MLeft 中插入链接,因此不会显示任何链接。我在链接前使用输出文本调用了 MCenter ,引用dummy属性为empty string
我不喜欢这种解决方法,我过去也遇到过 Seam @Out这个问题,我就这样解决了。有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

也许您可以使用以下方法:

 <f:view beforePhase="#{userMB.verifyUser}" />

在加载页面时将调用该方法

答案 1 :(得分:0)

只需将Center设为Left的托管属性即可。 E.g。

@ManagedBean
@RequestScoped
public class Left {

    @ManagedProperty(value="#{center}")
    private Center center;

    @PostConstruct
    public void init() {
        // Initialize links based on Center here.
    }

    // ...
}

答案 2 :(得分:0)

我认为你需要使用模板:

的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对象的列表,......(只要有一个合适的getter)

您也可以用您喜欢的任何内容替换middle.links,事件调用如#{middle.getLinks(page1)}