java - Tiles 2 通配符删除重复项不起作用

标签 java spring struts2 tiles2 wildcard-mapping

我在我的项目中使用 Spring、Struts 2 和 Tiles 2,并且我尝试在此处使用通配符表示法来删除我的设置中的重复项

<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

(注:我去掉了Struts的扩展名.action/.do)

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

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

我想自己尝试一下,但无法使基本通配符起作用。

最佳答案

Tiles has wildcard support在版本 2.1、2.2 中。

By default, Tiles 2.2 supports wildcards in definition names. Wildcards help a lot in writing less code to declare your definitions.

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

您可以像这样使用图 block 定义

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

关于java - Tiles 2 通配符删除重复项不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36831491/

相关文章:

java - Jarsigner "Please specify alias name"...但我做到了?

java - 在弹出窗口中显示面孔文本消息,以验证对话框中的输入

spring - 将参数传递给 Spring 测试

java - IntelliJ IDEA 14 : How to skip tests while deploying project into Tomcat

java - 请求的列表键 'countries' 无法解析为集合/数组/映射/枚举/迭代器类型。示例 : people or people. {名称}

java - 如何在 Struts 2 中使用 achor 标签发送值

java - 如何修复这个 lang.AssertionError?

java - 运行 jerseyTest 时出现 filenotfoundException - 缺少 applicationContext.xml

java - 将 getGenerateKeys 传递到下一页

java - Spring Boot Rest 中的 Jersey 名称绑定(bind)技术