我正在使用集成的Tiles 2.1和Spring MVC(在Spring Roo的帮助下)运行系统,并希望通过一个非常简单的bean设置菜单项,该bean返回一个项目列表:
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中,我打算使用如下的menuItem:
<tiles:useAttribute id="list" name="menuEntries" classname="com.reservation.ui.TestMenu" />
<c:forEach var="item" items="${list.Entries}">
<div class="item">
<div class="left">&nbsp;</div>
<div class="middle">${item}</div>
<div class="right">&nbsp;</div>
</div>
</c:forEach>
我没有找到任何类似的文档或示例,但我认为这应该是一个常见的用例。
有人知道适用的解决方案吗?
答案 0 :(得分: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文件保持不变。