Рубрики
Без рубрики

Пример аннотации для обработки формы Spring MVC

– Пример аннотации для обработки формы Spring MVC

В этом уроке мы покажем вам, как обрабатывать формы с помощью аннотаций в веб-приложении Spring MVC.

1. SimpleFormController против @контроллера

В веб-приложении Spring MVC на основе XML вы создаете контроллер форм, расширяя класс SimpleFormController .

В аннотации на основе вы можете использовать @Controller вместо этого.

Контроллер SimpleFormController

public class CustomerController extends SimpleFormController{
      //...
}

Аннотация

@Controller
@RequestMapping("/customer.htm")
public class CustomerController{
      //...
}

2. formBackingObject() против метода запроса. получить

В SimpleFormController вы можете инициализировать объект команды для привязки в методе formBackingObject() . В аннотации на основе вы можете сделать то же самое, аннотировав имя метода с помощью @RequestMapping(метод. ПОЛУЧИТЬ) .

Контроллер SimpleFormController

        @Override
	protected Object formBackingObject(HttpServletRequest request)
		throws Exception {
 
		Customer cust = new Customer();
		//Make "Spring MVC" as default checked value
		cust.setFavFramework(new String []{"Spring MVC"});
 
		return cust;
	}

Аннотация

        @RequestMapping(method = RequestMethod.GET)
	public String initForm(ModelMap model){
		
		Customer cust = new Customer();
		//Make "Spring MVC" as default checked value
		cust.setFavFramework(new String []{"Spring MVC"});
	
		//command object
		model.addAttribute("customer", cust);
		
		//return form view
		return "CustomerForm";
	}

3. onSubmit() против метода запроса. пост

В SimpleFormController отправка формы обрабатывается методом onSubmit() . В аннотации на основе вы можете сделать то же самое, аннотировав имя метода с помощью @RequestMapping(метод. СООБЩЕНИЕ) .

Контроллер SimpleFormController

       @Override
	protected ModelAndView onSubmit(HttpServletRequest request,
		HttpServletResponse response, Object command, BindException errors)
		throws Exception {
 
		Customer customer = (Customer)command;
		return new ModelAndView("CustomerSuccess");
 
	}

Аннотация

	
	@RequestMapping(method = RequestMethod.POST)
	public String processSubmit(
		@ModelAttribute("customer") Customer customer,
		BindingResult result, SessionStatus status) {
		
		//clear the command object from the session
		status.setComplete(); 
		
		//return form success view
		return "CustomerSuccess";
		
	}

4. справочные данные() против атрибута @ModelAttribute

В SimpleFormController обычно вы помещаете справочные данные в модель с помощью метода справочные данные() , чтобы представление формы могло получить к нему доступ. В аннотации на основе вы можете сделать то же самое, аннотировав имя метода с помощью @ModelAttribute .

Контроллер SimpleFormController

	@Override
	protected Map referenceData(HttpServletRequest request) throws Exception {
 
		Map referenceData = new HashMap();
 
		//Data referencing for web framework checkboxes
		List webFrameworkList = new ArrayList();
		webFrameworkList.add("Spring MVC");
		webFrameworkList.add("Struts 1");
		webFrameworkList.add("Struts 2");
		webFrameworkList.add("JSF");
		webFrameworkList.add("Apache Wicket");
		referenceData.put("webFrameworkList", webFrameworkList);
 
		return referenceData;
	}

Форма весны

	 

Аннотация

	@ModelAttribute("webFrameworkList")
	public List populateWebFrameworkList() {
		
		//Data referencing for web framework checkboxes
		List webFrameworkList = new ArrayList();
		webFrameworkList.add("Spring MVC");
		webFrameworkList.add("Struts 1");
		webFrameworkList.add("Struts 2");
		webFrameworkList.add("JSF");
		webFrameworkList.add("Apache Wicket");
		
		return webFrameworkList;
	}

Форма весны

	 

5. InitBinder() против @Инициализатор

В SimpleFormController вы определяете привязку или регистрируете редактор пользовательских свойств с помощью метода InitBinder() . В аннотации на основе вы можете сделать то же самое, аннотировав имя метода с помощью @InitBinder .

Контроллер SimpleFormController

    protected void initBinder(HttpServletRequest request,
		ServletRequestDataBinder binder) throws Exception {
			
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
    }

Аннотация

	@InitBinder
	public void initBinder(WebDataBinder binder) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		
		binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
	}

От Проверки

В SimpleFormController вам необходимо зарегистрировать и сопоставить класс валидатора с классом контроллера с помощью файла конфигурации XML-компонента, и проверка правильности и рабочие потоки будут выполняться автоматически.

В случае на основе аннотаций вам необходимо явно выполнить средство проверки и определить поток проверки в классе @Controller вручную. Видите разные:

Контроллер SimpleFormController

	
                
		

		
		
			
		
	

Аннотация

@Controller
@RequestMapping("/customer.htm")
public class CustomerController{
	
	CustomerValidator customerValidator;
	
	@Autowired
	public CustomerController(CustomerValidator customerValidator){
		this.customerValidator = customerValidator;
	}
	
	@RequestMapping(method = RequestMethod.POST)
	public String processSubmit(
		@ModelAttribute("customer") Customer customer,
		BindingResult result, SessionStatus status) {
		
		customerValidator.validate(customer, result);
		
		if (result.hasErrors()) {
			//if validator failed
			return "CustomerForm";
		} else {
			status.setComplete();
			//form success
			return "CustomerSuccess";
		}
	}
	//...

Полный Пример

Смотрите полный пример @Controller.

package com.mkyong.customer.controller;

import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
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.bind.support.SessionStatus;

import com.mkyong.customer.model.Customer;
import com.mkyong.customer.validator.CustomerValidator;

@Controller
@RequestMapping("/customer.htm")
public class CustomerController{
	
	CustomerValidator customerValidator;
	
	@Autowired
	public CustomerController(CustomerValidator customerValidator){
		this.customerValidator = customerValidator;
	}
	
	@RequestMapping(method = RequestMethod.POST)
	public String processSubmit(
		@ModelAttribute("customer") Customer customer,
		BindingResult result, SessionStatus status) {
		
		customerValidator.validate(customer, result);
		
		if (result.hasErrors()) {
			//if validator failed
			return "CustomerForm";
		} else {
			status.setComplete();
			//form success
			return "CustomerSuccess";
		}
	}
	
	@RequestMapping(method = RequestMethod.GET)
	public String initForm(ModelMap model){
		
		Customer cust = new Customer();
		//Make "Spring MVC" as default checked value
		cust.setFavFramework(new String []{"Spring MVC"});
		
		//Make "Make" as default radio button selected value
		cust.setSex("M");
		
		//make "Hibernate" as the default java skills selection
		cust.setJavaSkills("Hibernate");
		
		//initilize a hidden value
		cust.setSecretValue("I'm hidden value");
		
		//command object
		model.addAttribute("customer", cust);
		
		//return form view
		return "CustomerForm";
	}
	
	
	@ModelAttribute("webFrameworkList")
	public List populateWebFrameworkList() {
		
		//Data referencing for web framework checkboxes
		List webFrameworkList = new ArrayList();
		webFrameworkList.add("Spring MVC");
		webFrameworkList.add("Struts 1");
		webFrameworkList.add("Struts 2");
		webFrameworkList.add("JSF");
		webFrameworkList.add("Apache Wicket");
		
		return webFrameworkList;
	}
	
	@InitBinder
	public void initBinder(WebDataBinder binder) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		
		binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
		
	}
	
	@ModelAttribute("numberList")
	public List populateNumberList() {
		
		//Data referencing for number radiobuttons
		List numberList = new ArrayList();
		numberList.add("Number 1");
		numberList.add("Number 2");
		numberList.add("Number 3");
		numberList.add("Number 4");
		numberList.add("Number 5");
		
		return numberList;
	}
	
	@ModelAttribute("javaSkillsList")
	public Map populateJavaSkillList() {
		
		//Data referencing for java skills list box
		Map javaSkill = new LinkedHashMap();
		javaSkill.put("Hibernate", "Hibernate");
		javaSkill.put("Spring", "Spring");
		javaSkill.put("Apache Wicket", "Apache Wicket");
		javaSkill.put("Struts", "Struts");
		
		return javaSkill;
	}

	@ModelAttribute("countryList")
	public Map populateCountryList() {
		
		//Data referencing for java skills list box
		Map country = new LinkedHashMap();
		country.put("US", "United Stated");
		country.put("CHINA", "China");
		country.put("SG", "Singapore");
		country.put("MY", "Malaysia");
		
		return country;
	}
}

Чтобы аннотации работали, вам необходимо включить функцию автоматического сканирования компонентов весной.



	
	
	
	
 	
	
		
	
 	
	
              
                 /WEB-INF/pages/
              
              
                 .jsp
              
        

Скачать Исходный Код

Ссылка

  1. Аннотированные веб-контроллеры mvc весной 2.5
  2. Пример обработки формы Spring MVC – Версия XML
  3. Весенний MVC привет пример мировой аннотации
  4. Пример аннотации мультиакционного контроллера Spring MVC

Оригинал: “https://mkyong.com/spring-mvc/spring-mvc-form-handling-annotation-example/”