Html Tiles插件Struts2中的动态继承
我正在使用Struts2框架和tiles 2.0.6插件。在我的webapp中,我有一个“基本”布局,由页眉、页脚和页面内容组成: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
<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>