2016-08-25 5 views
5

Java、Spring MVC、およびHibernateを使用して、現在のWebサイトをコンポジットビューテンプレートの上に構築しています。動作方法は次のとおりです。BindingResultsとモデルをコンポジットビューで処理する

ブラウザはページを要求します。

内部結果ビュークラスは要求を傍受し、その値を取得し、要求されたページでヘッダーとフッターをマージするテンプレートjs​​pにリダイレクトします。

次に、jspが尋ねられたページであるかのようにテンプレートjs​​pを返します。

問題は、私は(私は詳細については対象について行わthis未回答の質問を参照)BindingResultオブジェクトから例えば、検証エラー、として、メインページにいくつかの情報を読んでトラブルを抱えているということです。

私は(間違っている場合私を修正)要求の流れは次のように働いていると思う:

ユーザ要求ページ> InternalResourceViewインターセプトとTemplate.jspにリダイレクト> Aは、JSPが示されている合併。

私は、要求されたページのモデルがマージされたJSPに存在しないと思います。

私は、データベースに集められたデータからリストや動的フォームを表示することに問題があるかもしれないと心配しています。私の悩みは間違っていますか?そうでない場合は、BindingResultエラーのような問題を解決するために何ができますか?私はあなたが

公開exposeModelAsRequestAttributes方法が欠けていると思う

<%@ 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> 
+0

に配置する必要があり、 'と' exposeHelpers(要求)。 'その電話を使うこともありますか? – marioosh

+0

リクエストとレスポンスの中に何が入っているのでしょうか? –

答えて

2

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:

は参考のために、CompositeViewのクラス以下BindingResultエラーに関するリンクとを使用します指定されたマップ内のモデルオブジェクトをリクエスト属性として返します。名前はモデルマップから取得されます。このメソッドは、RequestDispatcherによって到達可能なすべてのリソースに適しています。

exposeModelAsRequestAttributes(model,request); 

それは私がコール `exposeModelAsRequestAttributes(モデル、リクエスト)を参照` InternalResourceView`法の元の実装で

@Override 
protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, 
     HttpServletResponse response) throws Exception { 

    //start :new code added by sanka 
    exposeModelAsRequestAttributes(model,request); 
    //end :new code added by sanka 

    String dispatcherPath = prepareForRendering(request, response); 

API

+0

そうです。私はあなたの答えを見る前にそれを修正することができたが、それはポイントである。今私が持っている唯一の問題は、Binding Resultエラーをリダイレクト(Flashアトリビュートが動作していない状態)で生き残る方法です。 –

関連する問題