2012-05-29 3 views
0

У меня есть работающая система со встроенными 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 я намерен использовать MenuItems как следующее:

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

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

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

ответ

1

ОК, она идет так:

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

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 остаются неизменными.