2009-10-07 15 views
8

私は解決しなければならない問題がありますが、私は運がないです。私のサーブレット-servlet.xmlファイルでSpringのモデルからオブジェクトを表示していないJSP

、私は(他の人に加えて)次のBeanがあります。

<bean id="viewResolver" 
    class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> 
    <property name="prefix" value="/WEB-INF/jsp/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 

<context:component-scan base-package="com.servlet.web" /> 

私のテストコントローラは、次のようになります。

package com.servlet.web; 

import java.util.Map; 

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.RequestMapping; 

@Controller 
public class TestController 
{ 
    protected final Log log = LogFactory.getLog(getClass()); 

    @RequestMapping("/test") 
    public String methodName(Map<String, Object> map) { 
     map.put("someMessage", "some string here"); 
     return "test"; 
    } 

} 

私のJSPビュールックスこのように:私は、JSPを表示するときにそう

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
<title>servlet.com</title> 
</head> 
<body> 
${someMessage} 
</body> 
</html> 

、私はsomeMessage(ここではいくつかの文字列)の値を期待していますが、私だけだろう次を得る:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
<title>servlet.com</title> 
</head> 
<body> 
${someMessage} 

</body> 
</html> 

私はログをクランクアップするとき、私はモデルで行われている私のsomeMessageオブジェクトがされていることを確認:「

明らか
22:21:17,425 DEBUG DispatcherServlet:852 - DispatcherServlet with name 'servlet' determining Last-Modified value for [/servlet/access/test] 
22:21:17,426 DEBUG DefaultAnnotationHandlerMapping:183 - Mapping [/test] to handler '[email protected]' 
22:21:17,426 DEBUG DispatcherServlet:868 - Last-Modified value for [/servlet/access/test] is: -1 
22:21:17,426 DEBUG DispatcherServlet:700 - DispatcherServlet with name 'servlet' processing GET request for [/servlet/access/test] 
22:21:17,427 DEBUG HandlerMethodInvoker:158 - Invoking request handler method: public java.lang.String com.servlet.web.TestController.methodName(java.util.Map) 
22:21:17,427 DEBUG DispatcherServlet:1070 - Rendering view [org.springframework.web.servlet.view.JstlView: name 'test'; URL [/WEB-INF/jsp/test.jsp]] in DispatcherServlet with name 'servlet' 
22:21:17,427 DEBUG JstlView:328 - Added model object 'someMessage' of type [java.lang.String] to request in view with name 'test' 
22:21:17,428 DEBUG JstlView:237 - Forwarding to resource [/WEB-INF/jsp/test.jsp] in InternalResourceView 'test' 
22:21:17,429 DEBUG DispatcherServlet:666 - Successfully completed request 

、私の見解が正しくマッピングされているが、私はできますビューの要求に追加されたモデルオブジェクトにアクセスしているようです。私は過去に何度もSpring MVCでこの種のことをやったことがありますが、ここでは何か分かりにくいものがあります。何か案は?ありがとう。

+0

web.xmlを提供できますか?あなたのサーブレット - servlet.xml全体? 私の側で同じビューでコントローラをテストしたところ、正しくレンダリングされました。 – rochb

答えて

13

JSPでELの評価が有効になっていますか?私は時々問題を抱え、それは何とか変わった。 ${'test'}のような単純な式を評価し、 'test'が表示されるかどうかを確認してください。

ELを無効にする必要がある場合は、ページ指示文などで有効にすることもできます。

<%@ page isScriptingEnabled="true" isELIgnored="false" %> //of course it has to be FALSE 

(これは100%正しい場合は申し訳ありませんが、私は覚えていない。それはisELEnabled "かもしれません)

+2

ニース! <%@ page isELIgnored = "false"%>を自分の問題を修正したjspの先頭に追加しました。私はELを無効にするために何が起こっているのか分かりません。 ああ、isScriptingEnabledプロパティを含むとjspが壊れているようですので、削除しました。 isScriptingEnabledプロパティは有効なJSP 2.0以前のものでしたか? 要約すると、<%@ page isELIgnored = "false"%>を私のjspに追加することで問題が解決しました。 ありがとう、Moxn – labratmatt

+1

よろしくお願いいたします。私はかなりweb.xmlにこれを設定する方法があると確信しています。 [this] [1]によれば、すべてのJSPに対してELを有効にするためにweb.xmlに設定を追加することができます。 [1] http://www.theserverside.com/discussions/thread.tss?thread_id=44097 – moxn

1

私はSpring MVCと同じように多くのアノテーション設定を使用していないので、あなたの設定で自動的に行われていることはすべてわかりません。私の唯一の考えはこれです:メソッドパラメータはModelMapオブジェクトですか?前に見た例では、すべてパラメータ・タイプとしてModelMapを使用しています。このページのセクション13.11.3は、http://static.springsource.org/spring/docs/2.5.6/reference/mvc.htmlのいずれかです。

私が言ったように、私はこのタイプの自動設定を以前に使っていません - 私はそれを少し手動で行い、コントローラをAbstractControllerやSimpleFormControllerのようなものから拡張します。

+0

ありがとうございました。 私はModelMapを試してみたところ、同じ結果でした。 – labratmatt

4

私は同じ問題に遭遇した、および2と同様のアプリケーション(EL作業のものを比較した後私のtomcat 7の問題は、アプリケーションのweb.xmlで指定されたwebappのバージョンに依存していることに気づいた。

Web App 2.3を使用して同じjspが$ {someMessage}を表示します。 (これは、maven archetype:archetypeArtifactId = maven-archetype-webappを使って生成するものです)。適切にWebアプリケーション2.4ディスプレイにモデルオブジェクトを使用して

<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd" > 

<web-app> 
... 

同じJSP:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="webapp-id" version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
... 

それが役立つことを願っています!