Model view controller 使用tiles2和spring mvc动态设置页面标题

Model view controller 使用tiles2和spring mvc动态设置页面标题,model-view-controller,spring,title,tiles,tiles2,Model View Controller,Spring,Title,Tiles,Tiles2,我问自己这个问题已经有一段时间了,但我还没有在网上找到一个很好的解决方案 所以我使用Tiles2和SpringMVC,我想在body tile中动态设置页面标题。有办法吗 <definition name="mainTemplate" template="/WEB-INF/template/main.jsp"> <put-attribute name="header" value="/WEB-INF/template/header.jsp" /> <put-at

我问自己这个问题已经有一段时间了,但我还没有在网上找到一个很好的解决方案

所以我使用Tiles2和SpringMVC,我想在body tile中动态设置页面标题。有办法吗

<definition name="mainTemplate" template="/WEB-INF/template/main.jsp">
 <put-attribute name="header" value="/WEB-INF/template/header.jsp" />
 <put-attribute name="footer" value="/WEB-INF/template/footer.jsp" />
 <put-attribute name="body" value="/WEB-INF/template/blank.jsp" />
</definition>

<definition name="list" extends="mainTemplate">
 <put-attribute name="body" value="/WEB-INF/jsp/list.jsp" />
</definition>
以及在模板中执行c:out

平铺技术 如果“我想动态设置页面标题”,您的意思是“我想根据正在显示的互动程序设置页面标题,并且我想使用互动程序功能进行设置”,那么:

  • 定义所有权属性;大概是这样的:
  • 在页面布局中引用pageTitle属性;大概是这样的:
  • 在任何重要的磁贴中设置pageTitle属性 可变技术 实现此技术的最简单方法是向模型添加属性,并使用el表达式引用所述属性。比如说,

    您可以在控制器中执行此操作:

    String pageTitle; pageTitle = "something"; Model.add("PageTitle", pageTitle); 字符串页面标题; pageTitle=“某物”; 添加(“页面标题”,页面标题); 然后参照页面中的“PageTitle”属性,如下所示:

    <head> <title>${PageTitle}</title> <head> <title><c:out value="${PageTitle}"/></title> ${PageTitle} 您可以像这样使用c:out:

    <head> <title>${PageTitle}</title> <head> <title><c:out value="${PageTitle}"/></title> 瓷砖技术 如果“我想动态设置页面标题”,您的意思是“我想根据正在显示的互动程序设置页面标题,并且我想使用互动程序功能进行设置”,那么:

  • 定义所有权属性;大概是这样的:
  • 在页面布局中引用pageTitle属性;大概是这样的:
  • 在任何重要的磁贴中设置pageTitle属性 可变技术 实现此技术的最简单方法是向模型添加属性,并使用el表达式引用所述属性。比如说,

    您可以在控制器中执行此操作:

    String pageTitle; pageTitle = "something"; Model.add("PageTitle", pageTitle); 字符串页面标题; pageTitle=“某物”; 添加(“页面标题”,页面标题); 然后参照页面中的“PageTitle”属性,如下所示:

    <head> <title>${PageTitle}</title> <head> <title><c:out value="${PageTitle}"/></title> ${PageTitle} 您可以像这样使用c:out:

    <head> <title>${PageTitle}</title> <head> <title><c:out value="${PageTitle}"/></title> tiles.xml:

    <definition ... >
        ...
        <put-attribute name="title" value="My Title" />
    </definition>
    
    
    ...
    
    JSP:

    
    
    但是,如果您的应用程序只有一种语言,这才是一个好的解决方案。

    tiles.xml:

    <definition ... >
        ...
        <put-attribute name="title" value="My Title" />
    </definition>
    
    
    ...
    
    JSP:

    
    

    但是,如果您的应用程序只有一种语言,那么这才是一个好的解决方案。

    这对我来说是可行的。有什么问题吗

    瓷砖:

    <put-attribute name="myProjectRevision" value="1.0" type="string" />
    
    
    
    JSP:


    这对我很有用。有什么问题吗

    瓷砖:

    <put-attribute name="myProjectRevision" value="1.0" type="string" />
    
    
    
    JSP:


    您还可以将DwB的两个答案结合起来,这样您就可以充分利用这两个世界:

    <title>
        <tiles:insertAttribute name="title" ignore="true" />
        <c:if test="${not empty pageTitle}">
            <c:out value="${pageTitle}"></c:out>
        </c:if>
    </title>
    
    
    

    当您希望某些页面具有静态标题(因此只需在tiles.xml文件中进行设置)、某些页面具有完全动态标题(不要在tiles.xml中进行任何设置,只需将pageTitle添加到模型对象中)或两者兼而有之(我的最爱)时,此功能非常有用这里有一个静态的前半部分和一个动态的后半部分。

    您还可以将DwB的两个答案结合起来,这样您就可以充分利用这两个方面:

    <title>
        <tiles:insertAttribute name="title" ignore="true" />
        <c:if test="${not empty pageTitle}">
            <c:out value="${pageTitle}"></c:out>
        </c:if>
    </title>
    
    
    

    当您希望某些页面具有静态标题(因此只需在tiles.xml文件中进行设置)、某些页面具有完全动态标题(不要在tiles.xml中进行任何设置,只需将pageTitle添加到模型对象中)或同时具有静态前半部分和动态后半部分(我最喜欢)时,此功能非常有用。

    抱歉,我本应该更清楚这一点的。如果我在执行前确切地知道标题应该是什么,你的解决方案就行了。但我喜欢根据控制器检索的内容更改标题。有没有办法从“内容”磁贴中执行此操作?您可以从上面示例中的数据库中调用pageTitle类中标题的动态值,而不是我猜的硬编码值。对不起,我应该更清楚这一点。如果我在执行前确切地知道标题应该是什么,你的解决方案就行了。但我喜欢根据控制器检索的内容更改标题。有没有办法从“内容”上做到这一点平铺?您可以从上面示例中的数据库中调用pageTitle类中标题的动态值,而不是我猜的硬编码值。我认为这是它们的最佳解决方案,但仍然..在我看来,将视图代码放入控制器并不是最好的做法。我认为这是它们的最佳解决方案,但仍然..放入在控制器中查看代码对我来说并不是最好的选择。