Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html Tiles插件Struts2中的动态继承_Html_Jsp_Tiles - Fatal编程技术网

Html Tiles插件Struts2中的动态继承

Html Tiles插件Struts2中的动态继承,html,jsp,tiles,Html,Jsp,Tiles,我正在使用Struts2框架和tiles 2.0.6插件。在我的webapp中,我有一个“基本”布局,由页眉、页脚和页面内容组成: <definition name="sharedLayout" template="/shared/jsp/Base.jsp"> <put-attribute name="pageHeader" value="/shared/jsp/Header.jsp"/> <put-attribute name="pageConte

我正在使用Struts2框架和tiles 2.0.6插件。在我的webapp中,我有一个“基本”布局,由页眉、页脚和页面内容组成:

<definition name="sharedLayout" template="/shared/jsp/Base.jsp">
    <put-attribute name="pageHeader" value="/shared/jsp/Header.jsp"/>
    <put-attribute name="pageContent" value=""/>
    <put-attribute name="pageFooter" value="/shared/jsp/Footer.jsp"/>
</definition>

对于某些页面,这就足够了。然而,我也有几页都使用相同的副标题。处理此问题的最简单方法是创建一个附加的平铺定义:

<definition name="sharedLayoutExtended" template="/shared/jsp/BaseExtended.jsp">
    <put-attribute name="pageHeader" value="/shared/jsp/Header.jsp"/>
    <put-attribute name="pageSubHeader" value="/shared/jsp/SubHeader.jsp"/>
    <put-attribute name="pageContent" value=""/>
    <put-attribute name="pageFooter" value="/shared/jsp/Footer.jsp"/>
</definition>

但是,这有一个主要缺点,就是我复制了Base.jsp(以及Base.css、Base.js…)和BaseExtended.jsp中的大部分代码。使维护和开发变得更加困难

我尝试始终使用BaseExtended,然后对没有副标题的页面使用ignore属性:

<tiles:insertAttribute name="pageSubHeader" ignore="true" />

虽然这是可行的,但是BaseExtended中有一些元素只有在属性实际存在时才应该存在。例如,如果有一个副标题,那么jsp中的其他地方应该有一个包含某些内容的div。我无法将此特殊div添加到subheader.jsp中,因为中间还有其他元素:

BaseExtended.jsp:

<body>

<tiles:insertAttribute name="pageSubHeader" ignore="true" />

...some other jsp stuff...

IF subheader is actually present, then have some stuff here
ELSE have nothing here

<tiles:insertAttribute name="pageContent" />

...some other jsp stuff...

IF subheader is actually present, then have some stuff here
ELSE have OTHER stuff here

</body>

…其他一些jsp东西。。。
如果副标题确实存在,那么在这里有一些东西
这里没有别的东西
…其他一些jsp东西。。。
如果副标题确实存在,那么在这里有一些东西
这里还有其他东西吗
是否有一种方法可以实现这些“if/else”?

如果您想测试是否存在pageSubHeader,可以在这里使用

使用JSTL

<tiles:useAttribute name="pageSubHeader" id="pageSubHeader"/>
<c:if test="${not empty pageSubHeader}">
    //do your stuff here. 
</c:if>

//在这里做你的事。
还是脚本

    <tiles:useAttribute name="pageSubHeader" id="pageSubHeader"/>
    <%
    if(pageSubHeader != null) {
        //do your stuff or include your script
    } 
    %>

或者您也可以与一起使用。见相关问题


//在这里做你的事

不确定是否有帮助。

这是您的问题答案吗?
<tiles:importAttribute name="pageSubHeader" scope="request" />
<logic:notEqual name="pageSubHeader" value="">
  //do your stuff here
</logic:notEqual>