alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Spring Framework example source code file (PetsController.java)

This example Spring Framework source code file (PetsController.java) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Spring Framework tags/keywords

actionresponse, model, model, modelattribute, pet, petscontroller, petscontroller, requestmapping, requestmapping, requestparam, simpledateformat, string, string, text, util, view

The Spring Framework PetsController.java source code

package org.springframework.samples.petportal.portlet;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletPreferences;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.samples.petportal.domain.Pet;
import org.springframework.samples.petportal.service.PetService;
import org.springframework.samples.petportal.validation.PetValidator;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
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.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.portlet.bind.PortletRequestDataBinder;
import org.springframework.web.portlet.util.PortletUtils;

/**
 * This is a simple Controller which delegates to the 
 * {@link PetService PetService} and then populates the model with all 
 * returned Pets. This could have extended AbstractController in which 
 * case only the render phase would have required handling. However, 
 * this demonstrates the ability to simply implement the Controller 
 * interface.
 * 
 * @author John A. Lewis
 * @author Mark Fisher
 * @author Juergen Hoeller
 */
@Controller
@RequestMapping("VIEW")
@SessionAttributes("pet")
public class PetsController {

	private final PetService petService;

	@Autowired
	public PetsController(PetService petService) {
		this.petService = petService;
	}

	/**
	 * For the page where the 'birthdate' is to be entered, the dateFormat is
	 * provided so that it may be displayed to the user. The format is
	 * retrieved from the PortletPreferences.
	 */
	@ModelAttribute("dateFormat")
	protected String getDateFormat(PortletPreferences preferences) {
		return preferences.getValue("dateFormat", PetService.DEFAULT_DATE_FORMAT);
	}

	/**
	 * Registers a PropertyEditor with the data binder for handling Dates
	 * using the format as currently specified in the PortletPreferences.
	 */
	@InitBinder
	public void initBinder(PortletRequestDataBinder binder, PortletPreferences preferences) {
		String formatString = preferences.getValue("dateFormat", PetService.DEFAULT_DATE_FORMAT);
		SimpleDateFormat dateFormat = new SimpleDateFormat(formatString);
		binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
		binder.setAllowedFields(new String[] {"species", "breed", "name", "birthdate"});
	}

	@RequestMapping  // default render (action=list)
	public String listPets(Model model) {
		model.addAttribute("pets", this.petService.getAllPets());
		return "pets";
	}

	@RequestMapping(params = "action=view")  // render phase
	public String viewPet(@RequestParam("pet") int petId, Model model) {
		model.addAttribute("pet", this.petService.getPet(petId));
		return "petView";
	}

	@RequestMapping(params = "action=add")  // render phase
	public String showPetForm(Model model) {
		// Used for the initial form as well as for redisplaying with errors.
		if (!model.containsAttribute("pet")) {
			model.addAttribute("pet", new Pet());
			model.addAttribute("page", 0);
		}
		return "petAdd";
	}

	@RequestMapping(params = "action=add")   // action phase
	public void submitPage(
			ActionRequest request, ActionResponse response,
			@ModelAttribute("pet") Pet pet, BindingResult result,
			@RequestParam("_page") int currentPage, Model model) {

		if (request.getParameter("_cancel") != null) {
			response.setRenderParameter("action", "list");
		}
		else if (request.getParameter("_finish") != null) {
			new PetValidator().validate(pet, result);
			if (!result.hasErrors()) {
				this.petService.addPet(pet);
				response.setRenderParameter("action", "list");
			}
			else {
				model.addAttribute("page", currentPage);
			}
		}
		else {
			switch (currentPage) {
				case 0: new PetValidator().validateSpecies(pet, result); break;
				case 1: new PetValidator().validateBreed(pet, result); break;
				case 2: new PetValidator().validateName(pet, result); break;
				case 3: new PetValidator().validateBirthdate(pet, result); break;
			}
			int targetPage = currentPage;
			if (!result.hasErrors()) {
				targetPage = PortletUtils.getTargetPage(request, "_target", currentPage);
			}
			model.addAttribute("page", targetPage);
		}
	}

	@RequestMapping(params = "action=delete")  // action phase
	public void deletePet(@RequestParam("pet") int petId, ActionResponse response) {
		this.petService.deletePet(petId);
		response.setRenderParameter("action", "list");
	}

}

Other Spring Framework examples (source code examples)

Here is a short list of links related to this Spring Framework PetsController.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.