Декларативное внедрение bean-компонента в Tiles

У меня есть работающая система со встроенными Tiles 2.1 и Spring MVC (с помощью Spring Roo), и я хочу установить пункт меню с помощью очень простого компонента, который возвращает список элементов:

public class TestMenu {
 public ArrayList<String> getEntries() {
    ArrayList<String> returner = new ArrayList<String>();

    returner.add("MenuItem 1");
    returner.add("MenuItem 2");

    return returner;
 }
}

Моя конфигурация плиток выглядит так:

 <definition name="empty" template="/WEB-INF/layouts/empty.jspx">
  <put-attribute name="footer" value="/WEB-INF/views/empty/footer.jspx" />
  <put-attribute name="menu" value="/WEB-INF/views/empty/menu.jspx" />
  <put-attribute name="menuEntries">
   <bean classtype="com.reservation.ui.TestMenu" />
  </put-attribute>
 </definition>

И в моем menu.jspx я намерен использовать элементы меню, например:

<tiles:useAttribute id="list" name="menuEntries" classname="com.reservation.ui.TestMenu" />
<c:forEach var="item" items="${list.Entries}">
  <div class="item">
    <div class="left">&amp;nbsp;</div>
    <div class="middle">${item}</div>
    <div class="right">&amp;nbsp;</div>
  </div>
</c:forEach>

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

Кто-нибудь знает применимое решение?


person rainerhahnekamp    schedule 29.05.2012    source источник


Ответы (1)


Хорошо, это происходит так:

Класс TestMenu реализует ViewPreparer, который реализует метод execute и помещает запрошенные данные MenuData как ListAttribute в Tiles.

public class TestMenu implements ViewPreparer {
 public List<String> getMenuItems() {
    ArrayList<String> returner = new ArrayList<String>();

    returner.add("MenuItem 1");
    returner.add("MenuItem 2");

    return returner;
 }

 public void execute(TilesRequestContext tilesContext, AttributeContext attributeContext) throws PreparerException {
    String selection = attributeContext.getAttribute("selection").getValue().toString();
    ListAttribute listAttribute = new ListAttribute(this.getMenuItems());

    attributeContext.putAttribute("menuItems", listAttribute, true);
 }
}

Конфигурация и jspx-файл остаются прежними.

person rainerhahnekamp    schedule 21.09.2012