6

我将tiles 2.0.6 与struts 2.1.6 一起用作我的模板框架。我正在编写一个简单的 cms 页面,并希望让用户定义每个 html 页面的标题。

我有这样的标题定义

    <definition name="base" template="/WEB-INF/jsp/templates/base.jsp">
        <put-attribute name="title" value=" "/>
        <put-attribute name="header" value="/WEB-INF/jsp/templates/header.jsp"/>  
        <put-attribute name="content" value="dummy"/>
        <put-attribute name="footer" value="/WEB-INF/jsp/templates/footer.jsp"/>   
        <put-attribute name="search" value="/WEB-INF/jsp/search.jsp"/>
    </definition>    
    <definition name="staticview" extends="base">
        <put-attribute name="title" value=" - Static"/>
        <put-attribute name="content" value="/WEB-INF/jsp/static/view.jsp"/>
    </definition>  

有没有一种方法可以在后面的 jsp 属性中动态覆盖我的 header.jsp 上的标题(字符串),而不是使标题成为 jsp,例如 view.jsp。甚至使用 EL 更进一步

<put-attribute name="title" value="%{title}"/>

并让它动态地获取 struts ognl 上的标题。

请指教

提前致谢

4

6 回答 6

3

在视图页面中,我们需要有这个 -

<title><tiles:getAsString name="title" /></title>

上面将为您提供页面的标题。除了,因为我们希望页面标题是动态的,所以在 tiles.xml 配置中,我添加了

<definition name="page1" extends="base">
    <put-attribute name="title" value="Page 1"/>
    <put-attribute name="content" value="/WEB-INF/jsp/page1.jsp"/>
</definition>
<definition name="page2" extends="base">
    <put-attribute name="title" value="Page 2"/>
    <put-attribute name="content" value="/WEB-INF/jsp/page2.jsp"/>
</definition>

现在这看起来像是键入它会使它看起来像是静态的。但是每次查看该页面时,该页面的标题都应该相同。有什么更好的地方可以在tiles.xml 上获得这些信息。

对我来说,这不是标题本身,而是我需要不同的页面标题。我不想查看上下文属性来获取页面的路径并确定页面的标题。所以,这对我有用,并保持一切松散耦合。

如果您想为每个页面或任何类似内容使用不同的动态标题,则此方法有效。

于 2013-02-28T04:36:19.040 回答
1

保持磁贴定义如下:

    <put-attribute name="title" value=""/>

在您的操作类中添加标题作为属性。

在 view.jsp 页面中使用这个:

    <tiles:insertDefinition name="staticview">
        <tiles:putAttribute name="title"> 
            ${title} <%--OR, <s:property value="title"/>--%>
        </tiles:putAttribute>
        <%--Remainning content--%>
    </tiles:insertDefinition>
于 2011-09-09T06:24:11.820 回答
1

我试过这个,它有效。

代码1

<tiles:putAttribute name="title"> 
          You String
</tiles:putAttribute>

代码 2

<tiles:insertAttribute name="title" />

但是code1必须在code2之前执行。

于 2012-03-26T17:07:48.710 回答
0

我认为最好的解决方案是使用expression而不是value在图块定义中并传递 ${title}。但是不幸的是,您必须在每个视图中明确地执行此操作。在http://symfony-world.blogspot.com/2013/02/dynamic-attribute-values-with-apache.html查看更多信息

于 2013-02-14T22:18:46.667 回答
0

在其他地方找到了这个简单的解决方案:

像往常一样定义 Tiles 属性:

 <put-attribute name="title"  value="welcome.title"/>

在 jsp 页面上,属性首先被导入,然后可以与 struts 标签一起使用:

<tiles:importAttribute name="title" />
<title><s:text name="%{#attr['title']}"/></title> 
于 2013-08-13T10:25:58.250 回答
-1

我将标题添加到动作类中的请求中,这是我的模板 JSP 代码(图块 1):

<title>
    <tiles:getAsString name="title"/>
    <%-- add additional title (if found) --%>
    <logic:present scope="request" name="title"><bean:write scope="request" name="title"/></logic:present>
</title>
于 2009-11-20T19:11:53.520 回答