我是Apache-Tiles的新手。事实上,我使用它的最大原因是因为它是创建Spring Roo应用程序时的默认渲染器。我知道它有很大的追随者,所以我想我会试一试。
但是,我很困惑,如何完成一项简单的任务。我想在我的布局中向页面的<head>
部分添加一些声明。我知道/意识到我可以为头部包含一个单独的jsp页面,并为body包含一个jsp页面并在我的views.xml文件(as pointed out in this SO posting)中指定它们,但这看起来很笨重而且不合适。
例如,在指定视图中,我想包含一些额外的JS库。同样,我需要添加一些我想在页面上运行的jQuery JS脚本。按照惯例,我喜欢让<body>
清除任何此类代码,并将所有JS放在<head>
部分。
但是,为每个视图(head.jsp和body.jsp)创建2个文件的需要似乎并不正确。毕竟,这意味着我需要打开2个文件(头部和正文),因为我正在编写我的JS jQuery代码,以确切地查看正在处理的正文中的哪些元素等。
我知道在Sitemesh中我可以在同一页面内轻松完成。我也知道Sitemesh和Tiles并不意味着做同样的事情,但我希望有比两个单独的文件更简单的方法来做到这一点。
是否无法在同一视图jsp中定义不同的区域/包含(如Sitemesh中所示)?是唯一的选择有2个不同的文件 - 一个用于标题,一个用于正文?我可以做什么,以便我可以在index.jspx页面中同时拥有和定义?
目前的设置是:
Default.jspx:
<html xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tiles="http://tiles.apache.org/tags-tiles" xmlns:spring="http://www.springframework.org/tags" xmlns:util="urn:jsptagdir:/WEB-INF/tags/util" >
<jsp:output doctype-root-element="HTML" doctype-system="about:legacy-compat" />
<jsp:directive.page contentType="text/html;charset=UTF-8" />
<jsp:directive.page pageEncoding="UTF-8" />
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=8" />
<util:load-scripts />
<spring:message code="application_name" var="app_name" htmlEscape="false"/>
<title><spring:message code="welcome_h3" arguments="${app_name}" /></title>
</head>
<body class="tundra spring">
<div id="wrapper">
<tiles:insertAttribute name="header" ignore="true" />
<tiles:insertAttribute name="menu" ignore="true" />
<div id="main">
<tiles:insertAttribute name="body"/>
<tiles:insertAttribute name="footer" ignore="true"/>
</div>
</div>
</body>
</html>
Views.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN" "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
<tiles-definitions>
<definition extends="default" name="rates/index">
<put-attribute name="body" value="/WEB-INF/views/rates/index.jspx" />
</definition>
</tiles-definitions>
Index.jspx:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<div xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:spring="http://www.springframework.org/tags"
xmlns:util="urn:jsptagdir:/WEB-INF/tags/util"
xmlns:jQWidgets="urn:jsptagdir:/WEB-INF/tags/jQWidgets"
version="2.0">
<jsp:directive.page contentType="text/html;charset=UTF-8"/>
<jsp:output omit-xml-declaration="yes"/>
<spring:message code="label_rates_index" htmlEscape="false" var="title"/>
<util:panel id="title" title="${title}">
<spring:message code="application_name" htmlEscape="false" var="app_name"/>
<h3>
<spring:message arguments="${app_name}" code="welcome_titlepane"/>
</h3>
</util:panel>
</div>
答案 0 :(得分:0)
使用Tiles,您正在使用复合模式,而不是像Sitemesh那样使用装饰器模式。
Tiles非常强大且非常灵活,您可以从字符串属性或列表属性到通配符中选择数字。看一下Tiles文档。
另一篇引导您了解Tiles更高级功能的博客文章位于tech.finn.no