1

我是 Apache-Tiles 的新手。事实上,我使用它的最大原因是因为它是创建 Spring Roo 应用程序时的默认渲染器。我知道它有很多追随者,所以我想我会试一试。

然而,我很困惑,如何完成一个简单的任务。我希望<head>从我的布局中向页面部分添加一些声明。我知道/意识到我可以为标题包含创建一个单独的 jsp 页面,为正文包含创建一个单独的 jsp 页面,并在我的 views.xml 文件中指定它们(如本 SO 帖子中所指出的那样),但这似乎非常笨拙且不合适。

例如,在指定视图中,我想包含一些额外的 JS 库。同样,我需要添加一些我想在页面上运行的 jQuery JS 脚本。按照惯例,我喜欢<body>不使用任何此类代码,并将所有 JS 放在该<head>部分中。

但是,为每个视图(head.jsp 和 body.jsp)创建 2 个文件的需要似乎并不正确。毕竟,这意味着我需要打开 2 个文件(头部和正文),因为我正在编写我的 JS jQuery 代码以准确查看正文中的哪些元素正在被操作等。

我知道在 Sitemesh 中,我可以在同一页面内轻松完成此操作。我也知道 Sitemesh 和 Tiles 并不打算做同样的事情,但我希望有比两个单独的文件更简单的方法来做到这一点。

有没有办法从同一个视图 jsp 中定义不同的区域/包含(如在 Sitemesh 中)?是拥有 2 个不同文件的唯一选择 - 一个用于标题,一个用于正文?我有什么办法可以让我在 index.jspx 页面中同时拥有和 defns 吗?

当前设置是:

默认.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>

视图.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>

索引.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>
4

1 回答 1

0

使用 Tiles,您使用的是复合模式,而不是使用 Sitemesh 时的装饰器模式。

Tiles 功能强大且非常灵活,您可以选择从字符串属性或列表属性到通配符。查看 Tiles 文档。

另一篇介绍 Tiles 更高级功能的博文位于tech.finn.no

于 2013-09-22T20:21:02.127 回答