簡體   English   中英

Spring MVC:如何將表單數據從JSP傳遞到控制器

[英]Spring mvc : How to pass the form data from jsp to controller

假設我在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>

和人類

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

控制器類

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

這可能嗎?或者我需要添加一些代碼才能完成這項工作?我正在使用Spring MVC 4.0.3。 提前致謝。 :)

編輯:我嘗試了@ModelAttribute但出現錯誤400。嘗試使用@RequestBody但出現錯誤415。是否可以不使用注釋?

編輯:控制器實現

@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");
 }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM