5

我在 struts2 应用程序中使用瓷砖。在定义基本布局时,我定义了一个属性“scriptFile”。

<definition name="baseLayout" template="/application/base-layout.jsp" >
    ... 
</definition>

<definition name="custom.tiles" extends="baseLayout">
    <put-attribute name="scriptFile" value="js/custom-script.js"></put-attribute>
</definition>

如果开发人员在切片定义文件“tiles.xml”中提供“scriptFile”,则应使用以下行包含此脚本文件

<script language="javascript" src="<tiles:insertAttribute name="scriptFile"></tiles:insertAttribute>"></script>

但如果未定义 scriptFile 属性,则必须跳过此行。

如何检查图块中是否存在“scriptFile”属性。有没有更好的方法来做这件事?

4

4 回答 4

3

我试过了

<t:useAttribute name="scriptFile" id="script" classname="java.util.List" ignore="true"/>
<%
    if(script != null) {
        ... include script
    } 
%>

JSTL 也可以在这里使用。

于 2012-11-13T10:07:38.373 回答
1

通过使用defaultValue属性,我能够解决类似的问题。这样,如果属性不存在,您将不会收到异常。在这种情况下,如果页面不需要包含额外的 JavaScript,那么图块模板只会添加一个空字符串

JSP

<tiles:insertDefinition name="portalTemplate">

    <tiles:putAttribute name="body">
        <h1>Body</h1>
    </tiles:putAttribute>  

    <tiles:putAttribute name="js">
        <script src="script.js"></script>
    </tiles:putAttribute>   
</tiles:insertDefinition>

平铺模板 JSP

<html>
<body>
   <tiles:insertAttribute name="body"/>
   <script src="/public/libs/jquery/jquery-2.1.1.min.js"></script>

   <!-- Include extra JS after JQuery -->
   <tiles:insertAttribute name="js" defaultValue=""/>
</body>
</html>
于 2014-07-18T10:08:04.013 回答
0

只需使用ignore属性

<script language="javascript" src="<tiles:insertAttribute name='scriptFile'  ignore='true'/>"></script>

并且不要放入scriptFile您的定义中。

更新

getAsString那么在布局中使用标签怎么样

<tiles:getAsString name="jscript" ignore="true" />

并在定义中放置整个转义的脚本标签。

<put-attribute name="jscript" value="&lt;script src='js/custom-script.js' type='text/javascript'>&lt;/script>" />
于 2012-11-13T09:16:34.340 回答
0

我使用以下代码解决了那个问题(根据我从标签描述中得到的信息:忽略 - 如果此属性设置为true,并且名称指定的属性不存在,则无需编写任何内容直接返回。默认value 为 false,这将导致抛出运行时异常。):

<tiles:importAttribute name="stylesheets" ignore="${true}"/>

PS 请注意,使用 ${true} 而不是仅“真”值。

于 2017-11-17T15:48:05.127 回答