2011-09-21 46 views
2

我是Spring的新手。我在eclipse中創建了一個maven項目來測試Spring MVC,類似於Spring示例SVN倉庫中的mvc-basic示例。當我試圖在jsp中檢索模型值時,jsp只顯示$ {model屬性名},而不是模型屬性值。jsp中的Spring MVC模型訪問失敗

我錯過了什麼讓Spring無法檢索模型值?

下面是詳細信息:

代碼:控制器:

@Controller 
public class TestAction { 

@RequestMapping(value="/test" , method=RequestMethod.GET) 
public String returnHelloWorld(Model model) 
{ 
    ObjectTest objectTest=new ObjectTest(); 
    objectTest.setName("heng"); 
    model.addAttribute(objectTest); 
    return "/test/start"; 
} 
} 

代碼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://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> 
<%@ taglib prefix="s" uri="http://www.springframework.org/tags" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
    hello ${objectTest.name} 
</body> 
</html> 

當在服務器上運行它(Tomcat的6) 的頁面顯示等

他LLO $ {} objectTest.name

而應該是

招呼衡

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/xsd/maven- 4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>heng.spring</groupId> 
    <artifactId>firststudy</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <properties> 
    <org.springframework.version>3.0.5.RELEASE</org.springframework.version> 
    <org.slf4j.version>1.6.1</org.slf4j.version> 
    </properties> 

    <dependencies> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${org.springframework.version}</version> 
</dependency> 

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-expression</artifactId> 
    <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context-support</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 


    <dependency> 
    <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet.jsp</groupId> 
     <artifactId>jsp-api</artifactId> 
     <version>2.1</version> 
     <scope>provided</scope> 
    </dependency> 
<dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
</dependency> 



    </dependencies> 



</project> 

這裏是快照

enter image description here

注:

我創建了一個正常的Ec​​lipse動態的項目,並創建相同的控制器,JSP和其他組件。並且jsp可以成功檢索模型值。 這裏是項目和罐子的快照。

不同的是,該項目已springframework.web.servlet罐子 而Maven項目已sprinng-webmvc罐子

enter image description here

回答

7

該問題的原因是EL未啓用

,使EL,我改變了網絡。XML從

<?xml version="1.0" encoding="UTF-8"?> 
<!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> 
.... 
</web-app> 

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" 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_2_5.xsd"> 
</web-app> 
3

正確的方式來輸出數據與JSTL JSP是使用

<c:out value="${objectTest.name}" /> 

另一句話:我發現personnaly更加清晰使用的ModelAndView的:

@Controller 
public class TestAction { 

    @RequestMapping(value="/test" , method=RequestMethod.GET) 
    public ModelAndView returnHelloWorld() 
    { 
     ModelAndView modelAndView = new ModelAndView("/test/start"); 
     ObjectTest objectTest=new ObjectTest(); 
     objectTest.setName("heng"); 
     modelAndView.addObject("myObject", objectTest); 
     return modelAndView; 
    } 
} 

可以然後再輸出在你的JSP值:

<c:out value="${myObject.name}" /> 
+0

您好,我也嘗試的和JSP仍然打印$ {myObject.name}。我也試過@ResponseBody返回一個json對象。並且JSP可以捕獲json對象。 – sse