我是一个新的瓷砖用户并且喜欢它到目前为止。但我现在面临一个问题,我不确定瓷砖是否是我手中达到目标的正确工具。
我想要做的是创建一个在多个网站之间共享的通用注册表单。 此注册表格在每个网站上会略有不同。很明显,他们可以使用相同的jsp文件和java代码。我的目标是有一个.properties文件,我可以在其中配置哪些输入表单片段应该包含在表单中,哪些不应该(对于每个站点)。
有没有办法动态插入属性?
我创建了一个view preparer类。这样我就可以添加/覆盖现有属性。
public class TestViewPreparer extends ViewPreparerSupport {
public void execute(TilesRequestContext tilesContext, AttributeContext attributeContext) throws PreparerException {
Attribute attribute = new Attribute("/WEB-INF/views/search-panel/holiday-type.jsp");
attributeContext.putAttribute("rfFragment", attribute);
}
}
但是这只会在一次添加/覆盖一个属性。除了在模板文件中,我还要为每个文件添加以下行。
<tiles:insertAttribute name="rfFragment1" />
<tiles:insertAttribute name="rfFragment2" />
//... etc
我正在寻找的更像是添加Attribute
的列表,并将它们包含在带有循环的模板行中。不知怎的,这样:
<tiles:useAttribute id="fragments" name="rfFragments" classname="java.util.List" />
<c:forEach var="fragment" items="${fragments}">
<tiles:insertAttribute value="${fragment}" flush="true" /></c:forEach>
我的问题是AttributeContext
只能使用一个属性而不能使用属性列表。或者我错过了什么?
我希望我能详细描述我的问题。
答案 0 :(得分:1)
我目前正在尝试使用ViewPreparer在图块中创建动态导航菜单的类似问题。根据下面链接的帖子,您可以通过TilesRequestContext而不是使用AttributeContext传递ArrayLists。我还没有完全让自己工作,但也许这些链接将帮助将来寻找这个的人(让我永远找到好的例子)
Injecting the controller with Spring
我的实施:
public class HeaderController extends ViewPreparerSupport{
private EvalTypesService evalTypesService;
@Autowired
public HeaderController(EvalTypesService evalTypesService){
this.evalTypesService = evalTypesService;
}
@Override
public void execute(TilesRequestContext tilesContext, AttributeContext attributeContext) throws PreparerException{
List<EvalMasterEvaluationType> evalTypes = evalTypesService.getAllActiveEvalTypes();
tilesContext.getRequestScope().put("evalTypes", evalTypes);
}
}
view.xml中的定义:
<definition name=".mainTemplate" template="/WEB-INF/views/main_template.jsp" preparer="myPathToController.HeaderController">
<put-attribute name="header" value="/WEB-INF/views/tiles/header.jsp" />
<put-attribute name="content" value="" />
<put-attribute name="footer" value="/WEB-INF/views/tiles/footer.jsp" />
</definition>
调度servlet xml中的Tiles Bean:
<bean class="org.springframework.web.servlet.view.tiles2.TilesViewResolver"/>
<bean class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/views/**/views.xml</value>
</list>
</property>
<property name="preparerFactoryClass" value="org.springframework.web.servlet.view.tiles2.SimpleSpringPreparerFactory" /></bean>
在header.jsp磁贴中:
<div id="nav">
<c:out value="${msg}"></c:out>
<ul>
<c:forEach var="type" items="${evalTypes}">
<li><a href="<s:url value="/evalTypes/${type.id}" />"><c:out value="${type.name}" /></a></li>
</c:forEach>
</ul>