【发布时间】:2015-05-05 08:37:34
【问题描述】:
我的主要磁贴定义有以下代码:
<definition name="main" template="/WEB-INF/jsp/templates/main/template.jsp">
...
<put-list-attribute name="jsBase">
<add-attribute value="basics" />
<add-attribute value="jquery" />
</put-list-attribute>
<put-list-attribute name="jsExtra">
<add-attribute value="boostrap" />
<add-attribute value="d3" />
<add-attribute value="gridster" />
<add-attribute value="custom" />
</put-list-attribute>
</definition>
此定义将用于所有页面。 template.jsp 看起来像这样:
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles-extras" prefix="tilesx" %>
...
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" id="html">
<head>
...
<tilesx:useAttribute id="jsBase" name="jsBase" classname="java.util.List" />
<c:forEach var="file" items="${jsBase}">
<script type="text/javascript" src="<c:url value="/js/${file}.js"/>" />
</c:forEach>
<tilesx:useAttribute id="jsExtra" name="jsExtra" classname="java.util.List" />
<c:forEach var="file" items="${jsExtra}">
<script type="text/javascript" src="<c:url value="/js/${file}.js"/>" />
</c:forEach>
...
这个想法是加载在jsBase 和jsExtra 中定义的所有文件,考虑到我将保持jsBase 对所有页面保持不变,但jsExtra 可能因页面而异。我知道存在可以向列表添加额外值或用新值覆盖它的继承属性,但我想要的是继承原始列表中的所有值并仅删除一个值,因此我不必再次定义我想从原始列表中保留的值。有可能做这样的事情吗?:
<put-list-attribute name="jsExtra" inherit="true">
<remove-attribute value="custom" />
</put-list-attribute>
如果无法使用类似的解决方法来防止重复代码?
【问题讨论】:
标签: java jstl tiles apache-tiles