Buduję moją bieżącą witrynę internetową na szablonie widoku złożonego przy użyciu Java, Spring MVC i Hibernate. Oto, jak to działa:Radzenie sobie ze zdjęciami BindingResult i modelami z widokiem złożonym
Przeglądarka prosi o stronę.
Wewnętrzny Wynik Zobacz Klasa przechwytuje żądania, dostaje swoją wartość i przekierowuje do JSP szablon, który łączy się nagłówek i stopkę ze strony poprosił.
Następnie zwraca szablon jsp, tak jakby był stroną zadawaną.
Problem polega na tym, że mam problemy w czytaniu informacje na stronie głównej, jak na przykład błędy walidacji z obiektu BindingResult (patrz this pytanie bez odpowiedzi zrobiłem ten temat szczegóły).
myślę przepływ prośba pracuje tak (poprawcie mnie jeśli źle): Żądanie Strony
użytkownika> InternalResourceView przechwytuje i przekierowuje do Template.jsp> A połączyła JSP jest pokazany.
Uważam, że modele z Żądanej strony nie występują w połączonym jsp.
Martwię się, że jeśli chodzi o wyświetlanie list i formularzy dynamicznych z danych zgromadzonych w bazie danych, może się to okazać kłopotliwe. Czy myliłem się w moich kłopotach? Jeśli nie, co mogę zrobić, aby naprawić problemy, takie jak ten z błędami BindingResult?
odsyłającym, użyj linku o błędach BindingResult a klasa CompositeView poniżej:
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);
}
}
I 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>
W pierwotnej implementacji 'metoda InternalResourceView' widzę calls' exposeModelAsRequestAttributes (model, żądanie); 'i' exposeHelpers (request); "Może użyjesz również tych połączeń? – marioosh
Czy po prostu nie zgarniesz tego, co jest wewnątrz żądania i odpowiedzi? –