我正在寻找一种使用Apache Tiles以类似于ASP.NET MVC 4的方式管理CSS和JS资源的好方法。
在ASP.NET MVC4中,您有ContentBundles和ScriptBundles,您只需编写
即可@ Scripts.Render("〜/束/的jquery&#34);
它将使用所有正确的语法插入您的css / scripts。然后为了使它更好,有@RenderSection(" JavaScript",required:false),它允许您以正确的包含顺序插入JavaScript,并在视图上定义它。
@section JavaScript
{
<script type="text/javascript" src="@Url.Content("/Scripts/jquery.tablesorter.min.js")"></script>
<script type="text/javascript" src="@Url.Content("/Scripts/Custom/Roster.js")"></script>
}
为了简化这一点,我基本上想在Spring MVC中使用Apache Tiles做类似的事情。它甚至可能吗?
我最初的想法和尝试是创建一个&#34;捆绑&#34;作为tiles配置文件中的定义,然后需要一些JSP代码来正确插入和创建html语法。有没有人曾经尝试过这个或找到一个好的解决方案?
我在http://www.coderanch.com/how-to/java/TilesJavaScript找到了这个例子,但它对于Tiles 3来说似乎没有语法正确。
主layout.jsp
&#34;&GT;
以下是您为多个js文件执行的操作:
瓦片-defs.xml
<!-- Child page Definition -->
<definition name="child.page" extends="master.page">
<put name="title" value="Child Page" />
<put name="jsfile" value="app.childpage.jsfiles.tile" />
</definition>
<!-- JS Files Definition tile -->
<definition name="app.childpage.jsfiles.tile" path="/layouts/jslayout.jsp">
<putList name="jsfilesList">
<add value="/config/childpage_jsfile1.js"/>
<add value="/config/childpage_jsfile2.js"/>
<add value="/config/childpage_jsfile3.js"/>
</putList>
</definition>
jslayout.jsp
<tiles:useAttribute id="list" name="jsfilesList" classname="java.util.List" />
<c:forEach var="jsfileName" items="${list}">
<script src="<%=request.getContextPath()%><c:out value='${jsfileName}' />"></script>
</c:forEach>
基本上我想要一种干净的方式来使用类似于ASP.NET MVC捆绑方法的Apache Tiles包含我的所有JavaScript和CSS。这样我就不必将链接硬编码到需要额外内容的每个JSP文件中。
答案 0 :(得分:30)
对于任何有兴趣的人来说,这就是我最终实现它的方式。我使用Tiles 3做到了这一点,我不确定以前版本的Tiles中的语法是否不同。它似乎工作得很好。
layout.xml
<!-- templates -->
<definition name="base" template="/WEB-INF/views/templates/template.jsp">
<put-attribute name="title" value=""></put-attribute>
<put-attribute name="header" value="/WEB-INF/views/tiles/shared/header.jsp"></put-attribute>
<put-attribute name="content" value=""></put-attribute>
<put-attribute name="footer" value="/WEB-INF/views/tiles/shared/footer.jsp"></put-attribute>
<put-list-attribute name="javascripts">
<add-attribute value="/static/javascript/modernizr.js" />
<add-attribute value="/static/jquery/jquery-2.1.0.min.js" />
<add-attribute value="/static//bootstrap/js/bootstrap.min.js" />
</put-list-attribute>
<put-list-attribute name="stylesheets">
<add-attribute value="/static/bootstrap/css/bootstrap.min.css" />
<add-attribute value="/static/stylesheets/global.css" />
</put-list-attribute>
</definition>
<!-- HomeController -->
<definition name="home/index" extends="base">
<put-attribute name="title" value="Home"></put-attribute>
<put-attribute name="content" value="/WEB-INF/views/tiles/home/home.jsp"></put-attribute>
</definition>
<!-- LoginController -->
<definition name="login/login" extends="base">
<put-attribute name="title" value="Login"></put-attribute>
<put-attribute name="header" value=""></put-attribute>
<put-attribute name="content" value="/WEB-INF/views/tiles/user/login.jsp"></put-attribute>
<put-attribute name="footer" value=""></put-attribute>
<put-list-attribute name="stylesheets" inherit="true">
<add-attribute value="/static/stylesheets/sign-in.css" />
</put-list-attribute>
</definition>
<!-- UserController -->
<definition name="user/list" extends="base">
<put-attribute name="title" value="Users"></put-attribute>
<put-attribute name="content" value="/WEB-INF/views/tiles/user/list.jsp"></put-attribute>
</definition>
<definition name="user/add" extends="base">
<put-attribute name="title" value="User - Add"></put-attribute>
<put-attribute name="content" value="/WEB-INF/views/tiles/user/createOrUpdate.jsp"></put-attribute>
</definition>
<definition name="user/edit" extends="base">
<put-attribute name="title" value="User - Edit"></put-attribute>
<put-attribute name="content" value="/WEB-INF/views/tiles/user/createOrUpdate.jsp"></put-attribute>
</definition>
<!-- ErrorController -->
<definition name="error/error" extends="base">
<put-attribute name="title" value="Error"></put-attribute>
<put-attribute name="content" value="/WEB-INF/views/tiles/error/error.jsp"></put-attribute>
</definition>
template.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<tiles:importAttribute name="javascripts"/>
<tiles:importAttribute name="stylesheets"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content="XXXXXXXXXXX">
<meta name="description" content="Something">
<title><tiles:insertAttribute name="title"></tiles:insertAttribute></title>
<!-- stylesheets -->
<c:forEach var="css" items="${stylesheets}">
<link rel="stylesheet" type="text/css" href="<c:url value="${css}"/>">
</c:forEach>
<!-- end stylesheets -->
</head>
<body>
<!--[if lt IE 10]>
<p class="alert alert-warning">
Warning: You are using an unsupported version of Internet Explorer. We recommend using Internet Explorer
10+. If you are a Windows XP user you'll need to download an alternative browsers such as FireFox, Chrome,
Opera, or Safari.
</p>
<![endif]-->
<!-- header -->
<div id="header">
<tiles:insertAttribute name="header"></tiles:insertAttribute>
</div>
<!-- end header -->
<!-- content -->
<div id="content">
<tiles:insertAttribute name="content"></tiles:insertAttribute>
</div>
<!-- end content -->
<!-- footer -->
<div id="footer">
<tiles:insertAttribute name="footer"></tiles:insertAttribute>
</div>
<!-- end footer -->
<!-- scripts -->
<c:forEach var="script" items="${javascripts}">
<script src="<c:url value="${script}"/>"></script>
</c:forEach>
<!-- end scripts -->
</body>
</html>