2016-08-14 24 views
0

私はいくつかのSpring MVCを学ぼうとしています。私が試した最初のチュートリアルはmodel.addAttribute("printme", "From spring");で、JSPでは${printme}です。私はそれが動作しないコードを実行するとJSP ELがrequestScope変数を見つけられませんか?

@RequestMapping(value = "index", method = RequestMethod.GET) 
public String index(Model modelMap) { 
    System.out.println("on method"); 
    modelMap.addAttribute("printme", "Hello Spring FROM INDEX !!"); 
    return "index"; 
} 

ので、私はJSPに追加しました:

私のコントローラは簡単です。

私は体内でこれを巻き上げる:

 <h1> 
      ${param.printme} 
      <br /> 
      ${printme} 
      <br /> 
      ${requestScope.printme} 
      <br /> 
      <%=request.getParameter("printme")%> 
      <br /> 
      <%=request.getAttribute("printme")%> 
      <br /> 
      <%=pageContext.findAttribute("printme")%> 
     </h1> 

と私の出力ソースは次のようになります。

<h1> 

      <br /> 

      <br /> 
      Hello Spring FROM INDEX !! 
      <br /> 
      null 
      <br /> 
      Hello Spring FROM INDEX !! 
      <br /> 
      Hello Spring FROM INDEX !! 
     </h1> 

私は私には空の文字列だけでなく、request.getParameter()からヌルをparam.printmeを期待。

${printme}検索リクエストスコープとそれを見つけるには?

${printme}

  • ${requestScope.printme}
  • <%=requestScope.getAttribute("printme")%>、および
  • <%=pageContext.findAttribute("printme")%>と同じではないでしょうか?

ここでは何が起こっているのですか?${printme}は属性を検出しません。

私はちょうど${requestScope.printme}を使用し続けることができますが、もっと冗長で、なぜそれが動作しているのか知りたいのです。

私はTomcat7.0.52、Spring 4.0 xsds、java ee 3.0 xsdsを使用しています。

答えて

1

私は、次のような単純なプロジェクトがあります。

のpom.xmlを

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
          http://maven.apache.org/maven-v4_0_0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 

    <groupId>biz.tugay</groupId> 
    <artifactId>smvcelex</artifactId> 
    <packaging>war</packaging> 

    <version>1.0-SNAPSHOT</version> 
    <name>smvcelex Maven Webapp</name> 
    <url>http://maven.apache.org</url> 

    <dependencies> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.1.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.el</groupId> 
      <artifactId>javax.el-api</artifactId> 
      <version>3.0.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>4.0.5.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>4.0.5.RELEASE</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <finalName>smvcelex</finalName> 
     <plugins> 
      <plugin> 
       <groupId>org.eclipse.jetty</groupId> 
       <artifactId>jetty-maven-plugin</artifactId> 
       <version>9.2.1.v20140609</version> 
      </plugin> 
     </plugins> 
    </build> 

    <properties> 
     <maven.compiler.source>1.7</maven.compiler.source> 
     <maven.compiler.target>1.7</maven.compiler.target> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

</project> 

web.xmlの

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

    <servlet> 
     <servlet-name>springDispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/servletContext.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>springDispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

    <jsp-config> 
     <jsp-property-group> 
      <url-pattern>*.jsp</url-pattern> 
      <url-pattern>*.jspf</url-pattern> 
      <page-encoding>UTF-8</page-encoding> 
      <scripting-invalid>true</scripting-invalid> 
      <trim-directive-whitespaces>true</trim-directive-whitespaces> 
      <default-content-type>text/html</default-content-type> 
     </jsp-property-group> 
    </jsp-config> 

</web-app> 

servletContext.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"> 

    <bean id="sampleController" class="biz.tugay.SampleController"/> 

    <bean id="viewResolver" 
      class="org.springframework.web.servlet.view.InternalResourceViewResolver"/> 

</beans> 

SampleController.java

package biz.tugay; 

/* User: [email protected] Date: 2016/08/16 */ 


import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

@Controller 
@RequestMapping(value = "/") 
public class SampleController { 

    @RequestMapping(value = "", method = RequestMethod.GET) 
    public String indexController(Model model) { 
     model.addAttribute("printme", "Hello Spring FROM INDEX !!"); 
     return "index.jsp"; 
    } 
} 

、最後にインデックス。JSP

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"/> 
    <title>Hello</title> 
</head> 
<body> 
    ${printme} 
</body> 
</html> 

そして、私がlocalhostを訪問するとき:8080私は、テキスト

Hello Spring FROM INDEX !! 

がうまく表示されます。..

、このいずれかを使用してプロジェクトを比較し、追加のコードを提供している場合、さらにはお問い合わせください必須。

+1

さて、私はこの欠陥を持ったプロジェクトを削除しました。私は自分が持っていたものと提供したものを比較することはできません。しかし、これを使ってもうまくいきます...コントローラクラスをBeanとして明示的に宣言せずにスプリングを設定したことは分かりますが、 (注:netbeansを使用し、Mavenは使用しませんでした) 私はまだ適切な基本パッケージとmvc:annotation-drivenを使ってコンポーネントスキャンを実行します。 (これは私が正しく使用しているとは思わない)コンテキストを持っていました。 期待通りの結果を得ているものとして正しいものをマークしてください.. – MatrixPeckham

+0

@MatrixPeckhamこれはあなたを助けるかもしれません:http://stackoverflow.com/questions/35807056/how-many-ways-are-there-to-configure-the- spring-framework-what-are-the-differen –

-3

あなたのjspファイルの先頭にjstlが参照されていないようです。ドル記号はjstl略語です。 jspファイルの先頭に次のものがあることを確認してください。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> 
+0

申し訳ありませんが、この「回答」はまったくナンセンスです。 JSTLとELが何であるかを知るには、http://stackoverflow.com/tags/jstl/infoとhttp://stackoverflow.com/tags/el/infoを参照してください。 – BalusC

関連する問題