Как изменить компонент макета на страницах Tapestry 5 во время выполнения?

У меня есть один компонент макета для всех моих страниц, я хочу переключать этот компонент в зависимости от желания пользователя. Я не хочу добавлять свойство на каждую страницу, чтобы вернуть текущий компонент макета.


person Bahaa Zaid    schedule 12.09.2009    source источник


Ответы (1)


Предполагая, что у вас есть фиксированное количество макетов, вы можете использовать блоки. Ваш layout.tml будет выглядеть примерно так:

   <t:delegate to="layout"/>

   <t:block id="layout1">
     <body>...</body>
   </t:block>

   <t:block id="layout2">
     <body>...</body>
   </t:block>

Ваш layout.java будет иметь:

  public Object getLayout() {
    if (...) {
      return _layout1;
    } else {
      return _layout2;
    }
  }

  @Inject
  private Block _layout1;

  @Inject
  private Block _layout2;
person Brian Deterling    schedule 12.09.2009
comment
Отлично, но я не хочу помещать все макеты в один файл .tml. Есть ли способ делегировать их компоненту??? - person Bahaa Zaid; 14.09.2009
comment
Да, целью делегата может быть блок или компонент. Таким образом, вы можете просто определить компонент для каждого нужного вам макета. Я думаю, вам все равно нужно перечислить все эти компоненты в основном layout.tml, но html может быть в отдельных компонентах. - person Brian Deterling; 15.09.2009