2009-10-11 87 views
6

我使用tile 2.0.6作为我的模板框架以及struts 2.1.6。我正在写一个简单的cms页面,并希望让用户定义每个html页面的标题。struts 2,tiles 2动态标题

我有这样

<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

在我们需要有这样的看法页面 -

<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上获得这些信息。

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

如果你想为每个页面或类似的任何不同的动态标题,这工作。

+0

+1。但是,就更好的地方放置这些信息而言,我希望标题可以从捆绑中拉出来以实现国际化。这条路线意味着您需要为每种语言使用不同的图块定义。 – bphilipnyc 2015-04-28 14:59:33

+0

@bphilipnyc - 我完全同意。你知道一种使这种国际化友好的方法吗? – vivekmore 2016-11-03 20:07:31

+0

不幸的是,没有。对于我们的项目,由于这个原因,我避免在Tiles中放置标题(我从服务层调用消息包以获得国际化标题)。相关文章:http://stackoverflow.com/questions/8061953/tiles-struts-el-expressions – bphilipnyc 2016-11-03 21:15:47

-1

我的标题添加到Action类的要求,这里的模板我的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> 
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> 
1

我想这一点,和它的作品。

代码1

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

代码2

<tiles:insertAttribute name="title" /> 

但编码1必须CODE2之前执行。

+0

你可以使“你的字符串”动态,就像你可以把代码放在那里而不是一个静态的字符串? (最好是一些可以从资源文件中获取页面标题的代码) – user1884155 2014-02-06 15:59:35

0

发现这个简单的解决方案在别处:

瓷砖属性定义照例:

​​

在一个jsp页面的属性被第一进口,然后它可与支柱标签一起使用:

<tiles:importAttribute name="title" /> 
<title><s:text name="%{#attr['title']}"/></title> 
+0

其他地方http://stackoverflow.com/q/13920587/1700321? – 2013-08-13 10:28:05