Tiles2 Wildcard не работает
Я использую Spring-Struts2-Tiles2 в своем проекте и пытаюсь использовать здесь подстановочные знаки, чтобы удалить дубликат в моей настройке отсюда
<definition name="home-template1" template="/WEB-INF/jsp/templates/template1.jsp">
<put-attribute name="banner" value="/WEB-INF/jsp/sitePages/banner.jsp" />
<put-attribute name="header" value="/WEB-INF/jsp/sitePages/header.jsp" />
<put-attribute name="body" value="/WEB-INF/jsp/sitePages/body.jsp" />
<put-attribute name="archive" value="/WEB-INF/jsp/sitePages/archive.jsp" />
<put-attribute name="footer" value="/WEB-INF/jsp/sitePages/footer.jsp" />
</definition>
<definition name="home-template2" template="/WEB-INF/jsp/templates/template2.jsp">
<put-attribute name="banner" value="/WEB-INF/jsp/sitePages/banner.jsp" />
<put-attribute name="header" value="/WEB-INF/jsp/sitePages/header.jsp" />
<put-attribute name="body" value="/WEB-INF/jsp/sitePages/body.jsp" />
<put-attribute name="archive" value="/WEB-INF/jsp/sitePages/archive.jsp" />
<put-attribute name="footer" value="/WEB-INF/jsp/sitePages/footer.jsp" />
</definition>
<definition name="home-template3" template="/WEB-INF/jsp/templates/template3.jsp">
<put-attribute name="banner" value="/WEB-INF/jsp/sitePages/banner.jsp" />
<put-attribute name="header" value="/WEB-INF/jsp/sitePages/header.jsp" />
<put-attribute name="body" value="/WEB-INF/jsp/sitePages/body.jsp" />
<put-attribute name="archive" value="/WEB-INF/jsp/sitePages/archive.jsp" />
<put-attribute name="footer" value="/WEB-INF/jsp/sitePages/footer.jsp" />
</definition>
в
<definition name="home-*" template="/WEB-INF/jsp/templates/{1}.jsp">
<put-attribute name="banner" value="/WEB-INF/jsp/sitePages/banner.jsp" />
<put-attribute name="header" value="/WEB-INF/jsp/sitePages/header.jsp" />
<put-attribute name="body" value="/WEB-INF/jsp/sitePages/body.jsp" />
<put-attribute name="archive" value="/WEB-INF/jsp/sitePages/archive.jsp" />
<put-attribute name="footer" value="/WEB-INF/jsp/sitePages/footer.jsp" />
</definition>
но плитка дает мне следующую ошибку: org.apache.tiles.definition.NoSuchDefinitionException: home-template2
ниже приведен мой файл struts.xml с двумя действиями, ответственными за его вызов
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<constant name="struts.action.extension" value=","/>
<package name="test" extends="struts-default" namespace="/">
<result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
<action name="checkBlogUrl" class="checkBlogUrl">
<result name="success" type="redirectAction">
<param name="actionName">postPreview</param>
<param name="nextAction">${nextAction}</param>
<param name="blogSiteUrl">${blogSiteUrl}</param>
</result>
<result name="error">/WEB-INF/jsp/cmsPages/index.jsp</result>
</action>
<action name="postPreview" class="blogPostAction">
<result name="success" type="tiles">${nextAction}</result>
</action>
</package>
</struts>
пример вызова URL: mycms: 8080 / CMS / postPreview? nextAction = home-template2 & blogSiteUrl = qsdcza
(примечание: я удалил расширение.action/.do из стояков)
также я могу использовать подстановочные знаки в расширении? например:
<definition name="about-*" extends="home-*">
<put-attribute name="body" value="/WEB-INF/jsp/sitePages/about.jsp" />
</definition>
хочу сам попробовать, но не могу заставить основной подстановочный знак работать:(
Спасибо за чтение, и я ценю вашу помощь.
1 ответ
Tiles имеет поддержку подстановочных знаков в версиях 2.1, 2.2.
По умолчанию Tiles 2.2 поддерживает подстановочные знаки в именах определений. Подстановочные знаки очень помогают в написании меньшего количества кода для объявления ваших определений.
Для лучшего использования Tiles и Struts2 см. Интеграция Tiles 2.2.2.
Вы можете использовать определение плитки, как это
<definition name="home*" template="/WEB-INF/jsp/templates/{1}.jsp">
<put-attribute name="banner" value="/WEB-INF/jsp/sitePages/banner.jsp" />
<put-attribute name="header" value="/WEB-INF/jsp/sitePages/header.jsp" />
<put-attribute name="body" value="/WEB-INF/jsp/sitePages/body.jsp" />
<put-attribute name="archive" value="/WEB-INF/jsp/sitePages/archive.jsp" />
<put-attribute name="footer" value="/WEB-INF/jsp/sitePages/footer.jsp" />
</definition>