2016-11-18 2 views
-1

Я очень новичок в весеннем MVC. Мне было дано требование, чтобы строка запроса отправляла данные с использованием метода POST на контроллер. Я знаю, как это работает с GET, но я не знаю, как использовать метод POST для присоединения значений формы к строке запроса. Я делаю что-то вроде этого:Отправить строку запроса из представления в контроллер с использованием метода POST

<form action="/user/userId?firstname={firstname}&lastname={lastname}" method="POST"> 
Enter First Name<input type="text" name = "firstname" /> 
Enter Last Name<input type="text" name = "lastname" /> 
<input type="submit" value = "Submit" /> 
</form> 

Я хочу прикрепить имя и фамилию к строке. Как мне это сделать?

Это мой контроллер класс

@RequestMapping(value = "/user/userId",method = RequestMethod.POST) 
public ModelAndView submitForm(@RequestParam Map<String,String> queryUser) 
{ 
    System.out.println(queryUser.get("firstName")); 
    context = new ClassPathXmlApplicationContext("beans.xml"); 
    Service service = (Service) context.getBean(Service.class); 
    /*service.save(queryUser);*/ 
    ModelAndView model = new ModelAndView("SecondPage"); 
    return model; 

} 
+0

Почему вы используете «карту»? Если вы знаете, какие параметры вам нужны, просто объявляйте для них аннотированные параметры '@ RequestParam'. Вам не нужно указывать их в URL-адресе, это параметры формы. –

+0

Почему вы инициализируете новый 'ApplicationContext' по каждому запросу? –

+0

Я забыл удалить объект applicationcontext. Мой вопрос заключается в том, как прикрепить значения формы, то есть имя и фамилию к строке запроса? @SotiriosDelimanolis – chan

ответ

0

Прежде всего в вашем HTML коде должно быть изменено, удалить ?firstname={firstname}&lastname={lastname} из action атрибута <form> тега.

<form action="/user/userId" method="POST"> 
Enter First Name<input type="text" name = "firstname" /> 
Enter Last Name<input type="text" name = "lastname" /> 
<input type="submit" value = "Submit" /> 
</form> 

Теперь вы можете использовать @RequestParam, чтобы получить входные значения, как показано ниже:

@RequestMapping(value = "/user/userId", method = RequestMethod.POST) 
public ModelAndView submitForm(@RequestParam("firstname") String firstname, 
           @RequestParam("lastname") String lastname) 
{ 
    System.out.println("firstname: "+firstname); // Prints First Name 
    System.out.println("lastname: "+lastname); // Prints Last Name 
    // Your service call here 
    ModelAndView model = new ModelAndView("SecondPage"); 
    return model; 

} 
0

Есть несколько основных проблем с текущим кодом:

(1) Использование параметров запроса с POST HTTP (не рекомендуется), скорее используйте @ModelAttribute, как показано ниже, чтобы получить данные запроса

(2) Загрузка new ClassPathXmlApplicationContext внутри contr oller (это будет выполняться только один раз во время запуска приложения). Вместо загрузки службы бобов во время запуска с помощью component-scan и @Autowire их, как показано ниже

Чтобы устранить эти проблемы, вы можете обратиться ниже:

Controller Класс:

@Controller 
@RequestMapping(value="/users") 
public class UserController { 

    @Autowired 
    private UserService userService; //Autowire your User Service 

    @RequestMapping(method=RequestMethod.GET) 
    public String userInput(Model model) { 
     User user = new User(); 
     model.addAttribute("userForm", user); 
     return "User"; 
    } 

    @RequestMapping(method=RequestMethod.POST) 
    public String userSubmit(@ModelAttribute("userForm") User user, Model model) { 

     userService.save(user); 
     model.addAttribute("Result", User details added successfully"); 
     model.addAttribute("userDetails", user); 
     return "UserSaveResult"; 
    } 
} 

HTML код:

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> 
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 

<form:form method="post" modelAttribute="userForm" action="https://stackoverflow.com/users/save"> 
Enter First Name<form:input type="text" path = "firstname" /> 
Enter Last Name<form:input type="text" path = "lastname" /> 
<input type="submit" value = "Submit" /> 
</form:form>  

Вы можете см. here для аналогичного примера.

Смежные вопросы