Как сначала инициализировать определенный MBean при переходе на страницу - PullRequest
2 голосов
/ 11 июня 2011

У меня страница разделена на 3. Первая часть - это список ссылок, привязанных к mBean ( MLeft ), а вторая - текущий mBean ( MCenter )страницы, на которой я нахожусь. MCenter вставляет данные в MLeft, так что ссылки из первой части настраиваются на страницу, на которой я сейчас нахожусь. Дело в том, что когда страница отображается и ссылки оцениваются MLeftсоздается до MCenter (поскольку он обнаружен ранее на странице), а MCenter не получает возможности вставить ссылки в MLeft , поэтому ссылки не отображаются.Я поставил вызов MCenter перед ссылками, используя выходной текст со ссылкой на свойство dummy, которое является empty string.
Мне не нравится этот обходной путь, у меня была эта проблема в прошломтоже с Шов и @Out, и я решил это следующим образом.Есть ли лучший подход?

Ответы [ 3 ]

1 голос
/ 02 июля 2011

Может быть, вы можете использовать следующий метод:

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

метод будет вызван при загрузке страницы

0 голосов
/ 02 июля 2011

Я думаю, вам нужно использовать шаблоны:

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)}

0 голосов
/ 11 июня 2011

Просто сделайте Center управляемым свойством Left.Например,

@ManagedBean
@RequestScoped
public class Left {

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

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

    // ...
}
...