2016-11-18 11 views
3

私はこの操作に関するダブを持っています。このクラスのコントローラを作成する作品:アノテーションのマッピングとポストマッピング

@Controller 
public class StudentController { 
@RequestMapping(value = "/student", method = RequestMethod.GET) 
public ModelAndView student() { 
return new ModelAndView("student", "command", new Student()); 
} 

@RequestMapping(value = "/addStudent", method = RequestMethod.POST) 
public String addStudent(@ModelAttribute("SpringWeb")Student student, 
ModelMap model) { 
model.addAttribute("name", student.getName()); 
model.addAttribute("age", student.getAge()); 
model.addAttribute("id", student.getId()); 
return "result"; 
} 

しかしGetMappingとPostMappingは動作しません使用して、プロジェクトが正常に実行されますが、ページのコールを表示しません。つまり:

@Controller 
    public class StudentController { 

    @GetMapping("/student") 
    public ModelAndView student() { 
    return new ModelAndView("student", "command", new Student()); 
    } 

    @PostMapping("/addStudent") 
    public String addStudent(@ModelAttribute("SpringWeb")Student student, 
    ModelMap model) { 
    model.addAttribute("name", student.getName()); 
    model.addAttribute("age", student.getAge()); 
    model.addAttribute("id", student.getId()); 
    return "result"; 
    } 
} 

コードがいっぱい、以下の方法が正しく動作:

Student.java

public class Student { 

    private Integer age; 
    private String name; 
    private Integer id; 

    public Integer getAge() { 
     return age; 
    } 
    public void setAge(Integer age) { 
     this.age = age; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public Integer getId() { 
     return id; 
    } 
    public void setId(Integer id) { 
     this.id = id; 
    } 
} 

StudentController

import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.ModelAndView; 

@Controller 
public class StudentController { 

    @RequestMapping(value = "/student", method = RequestMethod.GET) 
    public ModelAndView student() { 
     return new ModelAndView("student", "command", new Student()); 
    } 

    @RequestMapping(value = "/addStudent", method = RequestMethod.POST) 
    public String addStudent(@ModelAttribute("SpringWeb") Student student, ModelMap model) { 
     model.addAttribute("name", student.getName()); 
     model.addAttribute("age", student.getAge()); 
     model.addAttribute("id", student.getId()); 
     return "result"; 
    } 
} 

はresult.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" 
     pageEncoding="UTF-8"%> 
<%@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> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Spring MVC Form Handling</title> 
</head> 
    <body> 
    <h2>Submitted Student Information</h2> 
     <table> 
     <tr> 
      <td>Name</td> 
       <td>${name}</td> 
      </tr>   
      <tr> 
       <td>Age</td> 
       <td>${age}</td> 
       </tr>  
       <tr> 
        <td>ID</td> 
        <td>${id}</td> 
        </tr> 
        </table> 
    </body> 
    </html> 

student.jspあなたSpringContext.xmlファイルで

<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<%@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> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Spring MVC Form Handling</title> 
</head> 
<body> 

    <h2>Student Information</h2> 
    <form:form method="POST" action="/HelloForm/addStudent"> 

    <table> 
    <tr> 
    <td><form:label path="name">Name</form:label></td> 
    <td><form:input path="name" /></td> 
    </tr> 

    <tr> 
    <td><form:label path="age">Age</form:label></td> 
    <td><form:input path="age"/></td> 
    </tr>     
    <tr> 
    <td><form:label path="id">ID</form:label></td> 
    <td><form:input path="id"/></td> 
    </tr> 

    <tr> 
    <td colspan="2"> 
    <input type="submit" value="Submit" /> 
</td> 
    </tr> 
     </table>    
    </form:form> 
</body> 
</html> 

SpringContext.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" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> 

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

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
<property name="prefix" value="/WEB-INF/jsp/" /> 
<property name="suffix" value=".jsp"/> 

</bean> 

</beans> 

web.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 
    <display-name>HelloForm</display-name> 

    <servlet> 
    <servlet-name>HelloForm</servlet-name> 
    <servlet-class> 
org.springframework.web.servlet.DispatcherServlet 
</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 

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

</web-app> 
+1

あなたはどの春のバージョンを使用していますか? – KLajdPaja

+0

私はSpring 4.3.4を使用しています。 –

+0

[mcve]を提供して、あなたのリクエスト、予想される動作、実際に得られる動作を正確に説明してください。 –

答えて

1

、あなたがあった(クラスをDefaultAnnotationHandlerMapping を使用@Requesを処理するためにSpring 3.2以降では廃止予定) @GetMapping、@PostMapping ...(バージョン4.3からSpringに導入されました)のような新しいアノテーションを理解していないアノテーションを暗黙的にマッピングしているので、新しいアノテーションは無視されます。新しいアノテーションを使用するには、RequestMappingHandlerMappingクラスを使用する必要があります。

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <!-- you also need to define an adapter, otherwise you will get a ServletException while handling the request --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> 

しかし、推奨される方法は、それはあなたのために上記の仕事をする、「MVC XML名前空間」を使用することです:あなたは、単にこのようなあなたのSpringContext.xmlでこのBeanを定義することができます。 (あなたが最初のMVCの名前空間を定義する必要があります)あなたのSpringContext.xmlに次のコードを追加します。

<mvc:annotation-driven/> 

これについての詳細はhereを参照してください。

0

@Controllerを@RestControllerに変更し、@GetMappingと@PostMappingを使用してコードを実行できます。これはうまくいくはずです。

関連する問題