我正在使用带有tile 2.0.6插件的Struts2框架。在我的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中有一些元素只有在属性存在的情况下才会出现。例如,如果有一个subheader,那么jsp中的其他地方应该有一个包含一些东西的div。我无法在我的subheader.jsp中添加这个特殊的div,因为中间还有其他元素:
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>
有没有办法可以实现这些“if / elses”?
答案 0 :(得分:1)
如果你想测试pageSubHeader是否存在,你可以在这里使用useAttribute。
使用JSTL
<tiles:useAttribute name="pageSubHeader" id="pageSubHeader"/>
<c:if test="${not empty pageSubHeader}">
//do your stuff here.
</c:if>
或scriptlets
<tiles:useAttribute name="pageSubHeader" id="pageSubHeader"/>
<%
if(pageSubHeader != null) {
//do your stuff or include your script
}
%>
或者您也可以importAttribute使用logic:not equal。请参阅相关问题here
<tiles:importAttribute name="pageSubHeader" scope="request" />
<logic:notEqual name="pageSubHeader" value="">
//do your stuff here
</logic:notEqual>
不确定是否有帮助。