помощь в реализации показа деталей - PullRequest
1 голос
/ 25 декабря 2010

привет. Пытаясь создать собственное весеннее приложение, я создал страницу для ввода имени и возраста. Нажав на кнопку «Отправить», я перейду на другую страницу, отображающую ввод пользователя. Я решил не использовать какую-либо базу данных. В качестве первого шагаЯ решил создать контроллер с методом для отображения вида формы. После того как я получу это право, я реализую другие методы.

package personinfo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import personinfo.form.PersonInfo;

@Controller
public class PersonInfoController {  
@RequestMapping(value ="/addPerson" )
public ModelAndView showAddPersonForm(){
    return new ModelAndView("addperson", "personInfoEntries", new PersonInfo());
}

@RequestMapping(value ="/addPerson" ,method =RequestMethod.POST)
    public String addPersonInfo(@ModelAttribute("person")PersonInfo perInfo){
        String name = perInfo.getName();
        int age =  perInfo.getAge();
        System.out.println("Name:" + name +"Age:"+ age);
        return "showperson";//how to pass name and age
    }
...
}

Объект поддержки формы - это personinfo.form.PersonInfo class

package personinfo.form;

public class PersonInfo {
    private String name;
    private int age;

    public PersonInfo(){
    }

    public PersonInfo(String name,int age){
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

}

/ WEB-INF / jsp / addperson.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Add Person</title>
</head>
<body>
<h2>Add Person</h2>
<form:form action="addPerson.html" commandName="personInfoEntries">
<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 colspan="2">
 <input type="submit" value="Add Person"/>
 </td>
</tr>
</table>
</form:form>
</body>
</html>

perinfo / WebContent / index.jsp равен

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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>index</title>
</head>
<body>
<jsp:forward page="addPerson.html"></jsp:forward>
</body>
</html>

/ perinfo / WebContent /WEB-INF / web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>personinfo</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

       <servlet>
  <servlet-name>dispatcher</servlet-name>
  <servlet-class>
   org.springframework.web.servlet.DispatcherServlet
  </servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>*.html</url-pattern>
 </servlet-mapping>
</web-app>

наконец, /perinfo/WebContent/WEB-INF/dispatcher-servlet.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:mvc="http://www.springframework.org/schema/mvc"
 xmlns:p="http://www.springframework.org/schema/p"
 xmlns:context="http://www.springframework.org/schema/context"
 xsi:schemaLocation=
 "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.0.xsd">
      <mvc:annotation-driven/>
      <context:annotation-config />

 <context:component-scan base-package="personinfo.controller" />

 <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
     p:prefix="/WEB-INF/jsp/"
        p:suffix=".jsp">

   <property name="contentType" value="text/html; charset=utf-8" />
 </bean>
</beans>

Как указал Крис, я добавил @Контроллер для класса контроллера и в servlet.xml.Теперь я могу видеть форму. Когда я нажимаю на кнопку отправки, отображается showperson.jsp. Так что все хорошо.

Когда выполняется метод addPersonInfo () в PersonInfoController, я хотел бы передатьимя и возрастные значения для showperson.jsp. Как я могу это сделать?Я возвращаю строку имени представления «showperson». Как я могу добавить к ней аргументы? И я не мог понять, как реализовать соответствующий метод, которому должно быть сопоставлено это имя представления.

Может кто-тоПожалуйста, покажите мне? Или мне нужно изменить типы возвращаемых данных метода addPersonInfo ().

Пожалуйста, помогите.

спасибо,

mark

Ответы [ 2 ]

1 голос
/ 25 декабря 2010

Предлагаю вам прочитать этот урок, который я написал Spring Security 3 - Руководство по интеграции MVC (часть 1) так что вы можете сравнить, какие элементы вам не хватает с вашим приложением.

Просто взглянув на код:

public class PersonInfoController {  
 @RequestMapping(value ="/addPerson" )
 public String showAddPersonForm(){
  System.out.println("showing AddPersonForm");
  return "addperson";
 }
...
}

Я заметил, что вы пропали без вести:

@Controller
@RequestMapping("/mycustommapping")

Обычно я написал бы ваш код так:

    @Controller
    @RequestMapping("/main")    
    public class PersonInfoController {  
     @RequestMapping(value ="/addPerson" )
     public String showAddPersonForm(){
      System.out.println("showing AddPersonForm");
      return "addperson";
     }
    ...
    }

Так что теперь URL должен быть / main / addPerson

Также в вашем dispatcher-servlet.xml у вас нет

<context:annotation-config />
0 голосов
/ 26 декабря 2010

Чтобы ответить на ваш следующий вопрос,

Когда выполняется метод addPersonInfo () в PersonInfoController, я хотел бы передать значения имени и возраста в showperson.jsp. Как я могу это сделать??Я возвращаю строку имени представления «showperson». Как я могу добавить к ней аргументы? И я не мог понять, как реализовать соответствующий метод, которому должно быть отображено это имя.

Вам нужно добавить имя и возрастные значения в модель и передать их в представление.Вы делаете это внутри addPerson ().

@RequestMapping(value ="/addPerson" ,method =RequestMethod.POST)
public String addPersonInfo(@ModelAttribute("person") PersonInfo perInfo, Model model) {
        String name = perInfo.getName();
        int age =  perInfo.getAge();

        // Add name reference to Model
        model.addAttribute("name", name);
        // Add age reference to Model
        model.addAttribute("age", age);

        return "showperson";
}

Тогда на вашей странице JSP вы должны хотя бы что-то вроде этого:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
 
<h1>Person</h1><table>
<p>name: ${id} </p>
<p>age: ${id} </p>
</body>
</html>

Проверьте мои другие учебники по предоставленной мной ссылке,Таких примеров много.

...