我正在使用Spring 3 mvc和Apache Tiles 3.0 .
我不知道如何在* jsp页面中插入一些数据,稍后我将用于插入模板tile * .jsp页面 .
Tiles defiontions文件如下所示:
<tiles-definitions>
<definition name="base.definition" template="/WEB-INF/views/layout.jsp">
<put-attribute name="title" value="" />
<put-attribute name="banner" value="/WEB-INF/views/banner.jsp" />
<put-attribute name="path" value="" />
<put-attribute name="menu" value="/WEB-INF/views/menu.jsp" />
<put-attribute name="data" value="" />
<put-attribute name="position" value="" />
</definition>
<definition name="/" extends="base.definition">
<put-attribute name="title" value="Home" />
<put-attribute name="path" value="/WEB-INF/views/path.jsp" />
<put-attribute name="data" value="/WEB-INF/views/data.jsp" />
<put-attribute name="position" value="/WEB-INF/views/position.jsp" />
</definition>
</tiles-definitions>
我想用一些数据填充“/WEB-INF/views/data.jsp”页面,例如 - 行形式数据库,然后使用它像模板页面的一部分(在这种情况下是它的布局页面) .
Layout.jsp页面如下所示:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title><tiles:insertAttribute name="title" /></title>
<link rel="stylesheet" href="<spring:theme code='body' />" type="text/css" />
<link rel="stylesheet" href="<spring:theme code='page' />" type="text/css" />
<link rel="stylesheet" href="<spring:theme code='banner' />" type="text/css" />
<link rel="stylesheet" href="<spring:theme code='path' />" type="text/css" />
<link rel="stylesheet" href="<spring:theme code='main' />" type="text/css" />
<link rel="stylesheet" href="<spring:theme code='menu' />" type="text/css" />
<link rel="stylesheet" href="<spring:theme code='source' />" type="text/css" />
<link rel="stylesheet" href="<spring:theme code='position' />" type="text/css" />
<link rel="stylesheet" href="<spring:theme code='data' />" type="text/css" />
</head>
<body>
<div id="page">
<div id="banner">
<tiles:insertAttribute name="banner" />
</div>
<div id="path">
<tiles:insertAttribute name="path" />
</div>
<div id="main">
<span id="menu">
<tiles:insertAttribute name="menu" />
</span>
<span id="source">
<span id="position">
<tiles:insertAttribute name="position" />
</span>
<span id="data">
<span id="dataSource">
<tiles:insertAttribute name="data" />
</span>
<span id="dataSource">
<tiles:insertAttribute name="data" />
</span>
<span id="dataSource">
<tiles:insertAttribute name="data" />
</span>
</span>
</span>
</div>
</div>
</body>
</html>
如果我把 <tiles:insertAttribute name="rowsFromDb"
放在 "/WEB-INF/views/data.jsp"
中我得到了一个错误:
SEVERE: Servlet.service() for servlet jsp threw exception
org.apache.tiles.template.NoSuchAttributeException: Attribute 'rowsFromDb' not found.
我不知道如何将数据发送到此属性'rowsFromDb'!我只知道如何将数据发送到布局页面上的变量(模板 - parrent)
3 回答
如果您打算在属性
rowsFromDb
中保存记录列表,则应在控制器中填充此列表并在模型中设置列表 . 然后在data.jsp
中,您可以使用<c:forEach>
标记迭代此列表 . 例如(一个用于说明要点的示例):Controller
data.jsp
您应该避免直接在JSP本身中进行任何数据库查询(并尽可能避免JSP中的任何Java) . JSP应该只处理渲染控制器给出的数据 .
您可以使用Tiles
org.apache.tiles.preparer.ViewPreparer
来实现此目的 .创建一个在源文件夹中实现
org.apache.tiles.preparer.ViewPreparer
的新类 . 例如:在Tiles定义中,必须在
definition
中添加preparer
属性,例如:成立的解决方案 . 谢谢大家的帮助!
控制器中的代码:
...
结论:页面的数据不是需要从控制器和目标页面发送的模板,使用'jsp'或'jstl'或...