【发布时间】:2016-08-25 09:50:29
【问题描述】:
我正在使用 Java、Spring MVC 和 Hibernate 在复合视图模板之上构建我当前的网站。以下是它的工作原理:
浏览器请求页面。
内部结果视图类拦截请求,获取其值并重定向到模板 jsp,该模板 jsp 将页眉和页脚与请求的页面合并。
然后它返回模板 jsp,就好像它是被请求的页面一样。
问题是我在阅读主页中的某些信息时遇到问题,例如,来自 BindingResult 对象的验证错误(有关详细信息,请参阅this我提出的关于该主题的未回答问题)。
我认为请求流程是这样工作的(如果有错误请纠正我):
用户请求页面 > InternalResourceView 拦截并重定向到 Template.jsp > 显示合并的 jsp。
我认为来自请求页面的模型不存在于合并的 jsp 中。
现在我担心,在从数据库中收集的数据中显示列表和动态表单时,我可能会遇到麻烦。我的麻烦有错吗?如果没有,我该如何解决诸如 BindingResult 错误之类的问题?
作为参考,请使用以下有关 BindingResult 错误和 CompositeView 类的链接:
import java.util.Map;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.view.InternalResourceView;
public class CompositeView extends InternalResourceView {
@Override
protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request,
HttpServletResponse response) throws Exception {
String dispatcherPath = prepareForRendering(request, response);
String[] parts = dispatcherPath.split("/");
String endpath;
if (parts[parts.length - 2].endsWith("views")) {
endpath = parts[parts.length - 1];
} else {
endpath = parts[parts.length - 2] +"/"+ parts[parts.length - 1];
}
request.setAttribute("partial", endpath);
RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/template.jsp");
rd.include(request, response);
}
}
还有 Template.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript" src="resources/js/jquery-3.1.0.js"></script>
<script type="text/javascript" src="resources/js/bootstrap.js"></script>
<link rel="stylesheet" href="resources/css/bootstrap.css">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title><spring:message code="application.title"></spring:message></title>
</head>
<body>
<div class="row">
<div class="col-md-8 col-md-offset-2">
<jsp:include page="navbar/header.jsp" />
</div>
</div>
<div class="row">
<div class="col-md-6 col-md-offset-3">
<jsp:include page="${partial}" />
<jsp:include page="navbar/footer.jsp" />
</div>
</div>
</body>
</html>
【问题讨论】:
-
在
InternalResourceView方法的原始实现中,我看到调用exposeModelAsRequestAttributes(model, request);和exposeHelpers(request);也许也使用那个调用? -
不会只抓取请求和响应中的内容吗?
标签: spring validation jsp spring-mvc