java - Spring MVC : How to pass the form data from jsp to controller

标签 java jsp spring-mvc

假设我在jsp中有这个表单

<form action="save" method="post">
 <input type="text" name="name" value="${person.name}">
 <input type="text" name="age" value="${person.age}">
 <input type="submit" value="Save">
</form>

以及 Person 类

public class Person {
 private String name;
 private String age;
 //getters and setters
}

Controller 类

public class Controller {
 @RequestMapping(value="/save")
 public ModelAndView save(Person person){
  //save person
 }
}

这可能吗?或者我需要添加一些代码才能使其工作?我正在使用 spring mvc 4.0.3。 提前致谢。 :)

编辑:我尝试了 @ModelAttribute 但出现错误 400。尝试使用 @RequestBody 但出现错误 415。不使用注释是否可以?

编辑: Controller 实现

@Controller
public class PersonController {

    @Autowired
    private PersonService personService;

    @RequestMapping(value="/", method=RequestMethod.GET)
    public ModelAndView list(){
        List<PersonDto> personDtos = personService.getAllPersons();
        ModelAndView model = new ModelAndView("index");
        model.addObject("persons",personDtos);
        model.addObject("roles",personService.getRoles());
        return model;
    }

    @RequestMapping(value="view/{personId}", method = RequestMethod.POST)
    public ModelAndView view(@PathVariable String personId){
        PersonDto personDto = new PersonDto();
        if (personId != null){
            personDto = personService.getPersonById(Integer.parseInt(personId));
            ModelAndView model = new ModelAndView("person");
            model.addObject("person",personDto);
            return model;
        }
        else{
            return new ModelAndView("redirect:/?message=Please select one person");
        }
    }   


    @RequestMapping(value="/add")
    public ModelAndView add(){
        ModelAndView model = new ModelAndView("person");
        return model;
    }

    @RequestMapping(value="/update", method = RequestMethod.GET)
    public ModelAndView update(@RequestParam(value="personId",required=false) int[] personId){
        PersonDto personDto = new PersonDto();
        if (personId != null && personId.length == 1){
            personDto = personService.getPersonById(personId[0]);
            ModelAndView model = new ModelAndView("person");
            model.addObject("person",personDto);
            return model;
        }
        else{
            return new ModelAndView("redirect:/?message=Please select one person");
        }
    }

    @RequestMapping(value="/delete", method = RequestMethod.POST)
    public ModelAndView delete(@RequestParam(value="personId",required=false) int[] personId){
        if(personId != null){   
            for(int id : personId){
                personService.deletePerson(id);
            }
            return new ModelAndView("redirect:/?message=Person/s deleted");
        }else{
            return new ModelAndView("redirect:/?message=Please select person/s to delete");
        }
    }

    @RequestMapping(value="/search", method = RequestMethod.GET)
    public ModelAndView search(@RequestParam(value="firstName",required=false) String firstName,
        @RequestParam(value="middleName",required=false) String middleName,
        @RequestParam(value="lastName",required=false) String lastName,
        @RequestParam(value="roles",required=false) String roles){
        ModelAndView model = new ModelAndView("index");
        List<PersonDto> personDtos = null;
        if (lastName.isEmpty() && firstName.isEmpty() && middleName.isEmpty() && roles.isEmpty()){
            personDtos = personService.getAllPersons();
        }
        else{
            personDtos = personService.searchPerson(lastName,firstName,
            middleName,roles);
        }
        model.addObject("persons",personDtos);
        model.addObject("roles",personService.getRoles());
        return model;
    }

    @RequestMapping(value="/test",method = RequestMethod.POST)
    public ModelAndView test(PersonDto personDto){
        System.out.println(personDto);
        return new ModelAndView("redirect:/?message="+"Person saved");
    }
}

除了测试之外,我调用其他方法没有问题。

最佳答案

你的 Controller 方法和类应该是这样的

@Controller
public class Controller {

 @RequestMapping(value="/save", method=RequestMethod.POST")
 public ModelAndView save(Person person){
  //save person

 return new ModelAndView("your url where you want to redirect after saing person");
 }
}

关于java - Spring MVC : How to pass the form data from jsp to controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36713869/

相关文章:

基于 Java 的服务器无法在满 VPS 内存的情况下运行

java - 使用 Executors.newSingleThreadExecutor() 的优势

java - 如何在java MySQL中实现离线同步?

java - Struts 2 - 选择默认值

java - JSP解析时出错

java - Servlet 的 MVC 架构的工作

java - 需要能够在单元测试中捕获Spring启动异常

java - 启动后 Spring Boot 应用程序失败 - 尝试调用不存在的方法。尝试是从以下位置进行的

在子类中使用 "super"并在父类(super class)中使用 "this"的 Java 运行时方法选择

spring-mvc - 关于 spring @ModelAttribute 接受任意字符串的问题