Tiles2 Wildcard无法正常工作

时间:2016-04-25 03:18:46

标签: java spring struts2 tiles2 wildcard-mapping

我在我的项目中使用了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>

但是tiles给出了以下错误: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>

示例网址调用:mycms:8080 / CMS / postPreview?nextAction = home-template2&amp; blogSiteUrl = qsdcza

(注意:我删除了扩展名.action / .do of struts)

另外,我可以在扩展程序中使用通配符吗?例如:

<definition name="about-*" extends="home-*">
    <put-attribute name="body" value="/WEB-INF/jsp/sitePages/about.jsp" />
</definition>

希望自己尝试但不能使基本的通配符工作:(

感谢您的阅读,感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

版本2.1,2.2中的

Tiles has wildcard support

  

默认情况下,Tiles 2.2支持定义名称中的通配符。通配符可以帮助您编写更少的代码来声明您的定义。

为了更好地使用Tiles和Struts2,请参阅Tiles 2.2.2 Integration

您可以像这样使用平铺定义

<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>