我使用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上的标题(String),例如view.jsp。甚至更进一步使用EL
<put-attribute name="title" value="%{title}"/>
并让它动态地在struts上获取标题。
请告知
提前致谢
答案 0 :(得分: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上获得这些信息。
对我而言,这不是标题本身,但我需要不同的页面标题。我不想查看context属性来获取页面的路径并确定页面的标题。所以,这对我有用,并保持一切松散耦合。
如果您想为每个页面或类似内容添加不同的动态标题,则此方法有效。
答案 1 :(得分: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>
答案 2 :(得分:1)
我尝试了这个,它确实有用。
代码1
<tiles:putAttribute name="title">
You String
</tiles:putAttribute>
代码2
<tiles:insertAttribute name="title" />
但是code1必须在code2之前执行。
答案 3 :(得分:0)
我认为最好的解决方案是在图块定义中使用expression
代替value
并传递$ {title}。但遗憾的是,您必须明确地在每个视图中执行此操作。请点击http://symfony-world.blogspot.com/2013/02/dynamic-attribute-values-with-apache.html
答案 4 :(得分:0)
在其他地方找到这个简单的解决方案:
像往常一样使用Tiles属性定义:
<put-attribute name="title" value="welcome.title"/>
在jsp页面上首先导入该属性,然后它可以与struts标签一起使用:
<tiles:importAttribute name="title" />
<title><s:text name="%{#attr['title']}"/></title>
答案 5 :(得分:-1)
我在动作类中为请求添加标题,这是我的模板的JSP代码(tile 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>