У меня есть следующий код для моего основного определения плитки:
<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
может варьироваться от страницы к странице. Я знаю, что существует свойство inheratance, которое может добавлять дополнительные значения в список или переопределять его новыми значениями, но я хочу наследовать все значения из исходного списка И удалить только одно значение, поэтому мне не нужно определять снова значения, которые я хочу сохранить из исходного списка. Можно ли сделать что-то вроде этого?:
<put-list-attribute name="jsExtra" inherit="true">
<remove-attribute value="custom" />
</put-list-attribute>
Если невозможно использовать что-то вроде обходного пути для предотвращения дублирования кода?