style="height: 200px; width: auto;" class="ui-dialog-content ui-widget-content" id="dialog"> <p>${message}</p> </div> </div> </div>Podemos perceber tambem, que dentro da JSP welcome.jsp so e necessario um framento de pagina que sera incluido dentro do DIV content.ItemAgora veremos o cadastro de item, que utiliza uma classe ItemService para armazenar os Items em memoria que serao cadastrados.ItemController.java@Controllerpublic class ItemController { @Autowired private ItemService itemService; @RequestMapping("/item") public ModelAndView list() { ModelAndView mav = new ModelAndView(); mav.setViewName("item/list"); mav.addObject("items", itemService.getItems()); return mav; } @RequestMapping("/item/add") public ModelAndView add() { ModelAndView mav = new ModelAndView(); mav.setViewName("item/form"); return mav; }...}ItemServiceImpl.java@Servicepublic class ItemServiceImpl implements ItemService { private List<Item> items; public ItemServiceImpl() { items = new ArrayList<Item>(); } public List<Item> getItems() { return items; } public void save(Item item) { if(items.contains(item)) { items.remove(item); } items.add(item); } public void remove(Item item) { items.remove(item); } public Item load(Integer itemId) { int i = items.indexOf(new Item(itemId, "")); if(i > -1) return items.get(i); else return null; }}Podemos ve que ao tentarmos acessar a URL /app/item, temos um mapeamento para o metod list(), que executara o metodo getItems() da classe ItemService.Depois disso, o ItemController, adiciona ao ModelAndView uma propriedade items com a lista de itens e dispacha para a view item/list. O viewResolver, que vimos no applicationContext, ira dispachar para a JSP /WEB-INF/jsp/item/list.jsp, que mostrara os dados.list.jsp<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><div id="item_content"> <script type="text/javascript"> $(function(){ $("#item_add") .click(function() { $('#item_content').load("item/add"); }); }); function loadAction(action) { $('#item_content').load(action); } </script> <div class="ui-dialog ui-widget ui-widget-content ui-corner-all undefined ui-resizable"> <div class="ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix"> <span id="ui-dialog-title-dialog" class="ui-dialog-title">Item</span> </div> <div style="height: 200px; width: auto;" class="ui-dialog-content ui-widget-content" id="dialog"> <div> <c:forEach var="message" items="${messages}"> ${message}<br /> </c:forEach> <br /> </div> <div> <a id="item_add" href="#">Novo</a> </div> <div> <table> <thead> <tr> <td> ID </td> <td> Descricao </td> </tr> </thead> <tbody> <c:forEach var="item" items="${items}"> <tr> <td> ${item.id} </td> <td> ${item.description} </td> <td> <a id="item_edit" href="javascript:loadAction('item/edit/${item.id}');">#editar</a> </td> <td> <a id="item_remove" href="javascript:loadAction('item/remove/${item.id}');">#excluir</a> </td> </tr> </c:forEach> </tbody> </table> </div> </div> </div></div>Novamente, temos somente um pequeno framento de codigo que sera carregado dentro do DIV content.Aqui tambem, ja podemos ve a utilizacao de uma URL para efetuar a exclusao de um Item:/app/item/remove/${item.id}Para efetuar o cadastro das informacoes temos o seguintes mapeamentos:@RequestMapping("/item/edit/{itemId}") public ModelAndView editar(@PathVariable Integer itemId) { ModelAndView mav = new ModelAndView(); mav.setViewName("item/form"); mav.addObject("item", itemService.load(itemId)); return mav; } @RequestMapping("/item/remove/{itemId}") public ModelAndView remove(@PathVariable Integer itemId) { ModelAndView mav = new ModelAndView(); mav.setViewName("forward:/app/item"); itemService.remove(new Item(itemId, "")); List<String> messages = new ArrayList<String>(); messages.add("Item removido com sucesso."); mav.addObject("item", itemService.getItems()); mav.addObject("messages", messages); return mav; } @RequestMapping(value = "/item/save") public ModelAndView save(Item item) { ModelAndView mav = new ModelAndView(); mav.setViewName("forward:"); itemService.save(item); List<String> messages = new ArrayList<String>(); messages.add("Item salvo com sucesso."); mav.addObject("item", itemService.getItems()); mav.addObject("messages", messages); return mav; }A diferenca aqui esta somente na utilizacao da anotacao @PathVariable, que mapea um parametro do metodo para a URL.@RequestMapping("/item/remove/{itemId}")public ModelAndView remove(@PathVariable Integer itemId)Outra caracteristica interessante do Spring MVC e utilizar a String "forward:" para fazer um redirecionamento utilizando todos os dados do model anterior.mav.setViewName("forward:/app/item");JSONPara finalizar, veremos agora como retornar alguns dados no formato JSON, que utilizando Spring MVC e realmente muito simples. Incluiremos mais esse mapeamento dentro da classe ItemController:@RequestMapping(value = "/item/list.json") public @ResponseBody List<Item> listjson() { return itemService.getItems(); }A anotacao @ResponseBody fara