1 / 100

Spring MVC

Spring MVC. Plan wykładu. Konfiguracja środowiska Kontroler Realizacja widoku z wykorzystaniem stron jsp Walidacja formularzy Upload i download plików Spring 2.5 Formularz typu Wizzard Inne przydatne zagadnienia. Moduł Spring Web. Implementacja wzorca MVC Model

kalia-neal
Télécharger la présentation

Spring MVC

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Spring MVC

  2. Plan wykładu • Konfiguracja środowiska • Kontroler • Realizacja widoku z wykorzystaniem stron jsp • Walidacja formularzy • Upload i download plików • Spring 2.5 • Formularz typu Wizzard • Inne przydatne zagadnienia Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  3. Moduł Spring Web • Implementacja wzorca MVC • Model • Interfejs Controller i wiele jego implementacji • Wbudowana walidacja i formatowanie danych • Integracja z różnymi technologiami widoku (JSP, JSF, Struts i inne) • Zaawansowany mechanizm mapowania URL • Wbudowany mechanizm file upload • Spring WebFlow – rozszerzenie modułu Web o możliwość definiowania przepływów – ścieżek używania aplikacji webowej Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  4. DispatcherServlet • Rolę zarządcy pełni zdefiniowany w pliku konfiguracyjnym web.xml serwlet będący instancją klasy DispatcherServlet • Jest on odpowiedzialny za przyjmowanie żądań z zewnątrz i przekierowywanie żądań do właściwych kontrolerów • Wymagane jest, aby konfiguracja aplikacji internetowej mieściła się w pliku konfiguracyjnym WEB-INF/sample-servlet.xml • Do serwletu kontener będzie kierował wszystkie żądania, których adres URL pasuje do wzorca Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  5. InternalResourceViewResolver (I) • InternalResourceViewResolver zajmuje się odwzorowaniem nazw logicznych na fizyczne adresy zasobów. • InternalResourceViewResolver zamienia logiczną nazwę widoku, np. uzytkownik na fizyczne adresy: /WEB-INF/jsp/uzytkownik.jsp Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  6. InternalResourceViewResolver (II) <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/jsp/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  7. Kontroler (I) • Kontroler to główny punk obsługi żądań na akcje. • Kontroler implementuje logikę biznesową. • Wynikiem działania kontrolera jest zwrócony obiekt ModelAndView, zawierający logiczną nazwę widoku. return new ModelAndView("/uzytkownik/uzytkownikRekord”); return new ModelAndView(new RedirectView(”uzytkownikList.html", true)) Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  8. Kontroler (II) private final static String FORM_VIEW = "uzytkownik/uzytkownikRekord"; private final static String SUCCESS_VIEW = "uzytkownikList.html"; return FORM_VIEW; return "redirect:" + SUCCESS_VIEW; Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  9. @Controller @Controller(”uzytkownikList”) //@SessionAttributes public class UzytkownikListController { ... } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  10. @SessionAtribute @SessionAttributes( value = { ”adresCommand", "raportCommand", ”uzytkownikCommand", ”ksiazkaCommand"}) sessionStatus.setComplete(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  11. @RequestMapping (I) @RequestMapping (method = RequestMethod.GET, value = "/uzytkownik/uzytkownikRekord.html") public String getForm( Model model, HttpServletRequest request) Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  12. @RequestMapping (II) @RequestMapping (method = RequestMethod.POST, value = "/uzytkownik/uzytkownikRekord.html") public String submitForm( Model model, @RequestParam(defaultValue = "0”) int page, HttpServletRequest request, HttpServletResponse response, @ModelAttribute(”command") Command command, BindingResult bindingResult, SessionStatus sessionStatus)) Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  13. @RequestParam @RequestParam String adres @RequestParam(defaultValue = "0", required = false) int page @RequestParam Integer[] kursId @RequestParam(defaultValue = "-1", required = false, value = ”uzytkownikId") Uzytkownik uzytkownik) Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  14. @PathVariable (I) @RequestMapping(method = RequestMethod.GET, value = "/uzytkownik/zdjecie/{id}") public void zdjecie( @PathVariable int id, HttpServletResponse response) { if (id == 0) return; ... } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  15. @PathVariable (II) @RequestMapping(method = RequestMethod.GET, value = "/dane/{wydzial}/uzytkownik/{email}") public void getForm(@PathVariable(”wydzial") String namiar, @PathVariable String email) Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  16. @ModelAttribute @ModelAttribute(”uzytkownikCommand”) UzytkownikCommand uzytkownikCommand, @ModelAttribute(”uzytkownikCommand") public UzytkownikCommand formBackingObject() { UzytkownikCommand uzytkownikCommand = new UzytkownikCommand(); return uzytkownikCommand; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  17. Model model.addAttribute(”uzytkownikCommand", new uzytkownikCommand()); void referenceData(Model model) { List<Slownik> wojewodztwoList = new ArrayList<Slownik>(); Preselection preselection = new preselection(Wojewodztwo.class); preselection.setActive(true); wojewodztwoList = slownikService.findByCriteria(preselection); model.addAttribute("wojewodztwoList", wojewodztwoList); } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  18. Sterowanie <input type="submit" name="obsluga" value="Koniec"/> String akcja = ServletRequestUtils.getStringParameter(request, "obsluga”, null); if (”Koniec".equals(akcja)) { .... } if (WebUtils.hasSubmitParameter(request, "obsluga")) { .... } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  19. ApplicationContextAware public class UzytkownikRekordController implements ApplicationContextAware private ApplicationContext applicationContext; applicationContext.getBean(serviceBeanName) Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  20. @initBinder (I) @InitBinder public void initBinder(WebDataBinder binder) { binder.registerCustomEditor(Date.class, "dataUrodzenia", new DateEditor()) binder.registerCustomEditor(Uzytkownik.class, new EntityEditor(applicationContext, ”uzytkownikService")); } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  21. DataBinder void registerCustomEditor(Class referenceData, String field, PropertyEditor propertyEditor) void setAllowedFields(String[] allowedFields) void setDisallowedFields(String[] disallowedFields) void setRequiredFields(String[] requiredFields) binder.setDisallowedFields(new String[] {"id"}) Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  22. Editor (I) public class DateEditor extends PropertyEditorSupport { private DateFormat dateFormat; public DateEditor(Locale locale) { super(); dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, locale); } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  23. Editor (II) public String getAsText() { Date value = (Date) getValue(); if (value != null) return dateFormat.format(value) ; return ””; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  24. Editor (III) public void setAsText(String text) throws IllegalArgumentException { if (StringUtils.hasText(text)) { setValue(dateFormat.parse(text)); //obsługa błędu } else { setValue(null); } } } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  25. Editor (IV) public class EntityEditor extends PropertyEditorSupport { private Object serviceBean; public EntityEditor(ApplicationContext ctx, String serviceBeanName) { this.serviceBean = ctx.getBean(serviceBeanName); } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  26. Editor (V) @Override public String getAsText() { Object entity = getValue(); if (entity == null) return "-1"; Method getId = entity.getClass().getMethod(”getId”); int id = (Integer) getId.invoke(entity); return String.valueOf(id); } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  27. Editor (VI) @Override public void setAsText(String textId) throws IllegalArgumentException { int id = Integer.parseInt(textId); Method getEntity = serviceBean.getClass().getMethod(”get”, int.class); Object entity = getEntity.invoke(serviceBean, id); setValue(entity); } } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  28. Spring 3 Type Conversion (I) public abstract class GenericConverter<T> implements Converter<String,T> { protected GenericDAO<T> dao; public abstract void setDao(GenericDAO<T> dao); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  29. Spring 3 Type Conversion (II) public T convert(String source) { if (!StringUtils.hasText(source)) return null; int id = Integer.parseInt(source); if (id < 0) return null; return dao.get(id); } } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  30. Spring 3 Type Conversion (III) public class WydzialConverter extends GenericConverter<Wydzial> implements Converter<String, Wydzial> { .... // setter do dao } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  31. Spring 3 Type Conversion (IV) public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Wydzial wydzial = (Wydzial) obj; if (this.getId() == wydzial.getId()) return true; return false; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  32. Spring 3 Type Conversion (V) binder.setConversionService(conversionService) <mvc:annotation-driven conversion-service="conversionService" /> <bean id="conversionService" class="org.springframework.format.support. FormattingConversionServiceFactoryBean"> <property name="converters"> <list> <bean class=”common.WydzialConverter"></bean> <bean class=”common.WojewodztwoConverter"></bean> </list> </property> </bean> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  33. Widok - zastosowanie EL ${zmienna.pole} • true i false • liczby całkowite i zmiennoprzecinkowe • łańcuchy znaków • operatory arytmetyczne: + - * / % mod div • operatory logiczne: and or not && || ! • operatory porównania: == != => > <= < lt gt le ge eq ne • empty, null, instrukacja warunkowa A ? B : C Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  34. c:set <c:set value = "<%=TypDostepu.ADMINSTRATOR %>" var = ”admin” /> <c:when test="${dostep eq admin}"> ... Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  35. c:out <div class="value"> <c:out value="${uzytkownikCommand.uzytkownik.imie} ” /> </div> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  36. c:if <c:if test="${page == 1}”> .... </c:if> <c:if test="${ not empty uzytkownikCommand.uzytkownik.dzieci}"> </c:if> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  37. c:url <c:url value="uzytkownikRecord.html" var="adresurl” /> <a href = "<c:url value="uzytkownikRekord.html?id=${pozycja.id}"></c:url>">Edit</a> <a href="<c:url value="uzytkownikRekord.html"></c:url>">Dodaj nowy</a> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  38. c:when <c:choose> <c:when test="${uzytkownikCommand.typOP}"> <legend>Adres</legend> <c:out value="Nie dotyczy"></c:out> </c:when> <c:otherwise> .... </c:otherwise> </c:choose> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  39. c:forEach <c:forEach items="${uzytkownikCommand.uzytkownik.dzieci}" var=”dziecko" varStatus="loop” begin=”0” end=”10”> <c:out value="${loop.index + 1}."/> <c:out value=”dziecko[${loop.index}].imie”/> <form:input path=”dziecko[${loop.index}].nazwisko"/> </c:forEach> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  40. Biblioteka funkcji (I) ${fn:length(uzytkownikCommand.dzieckoList)} ${fn:length(uzytkownikCommand.imie)} ${fn:substringAfter(obiekt.nazwa,"Opis: ")} Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  41. Biblioteka funkcji (II) boolean contains(String, String) boolean containsIgnoreCase(String, String) boolean endsWith(String, String) int indexOf(String,String) String join(String[], String) int length(Object) String replace(String, String, String) String[] split(String, String) boolean startsWith(String, String) String substring(String, int, int) Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  42. Biblioteka funkcji (III) String substringAfter(String, String) String substringBefore(String, String) String toLowerCase(String) String toUpperCase(String) String trim(String) Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  43. spring:nestedPath <spring:nestedPath path="uzytkownik.adres"> <form:label path="ulica">Ulica</form:label> <form:input path="ulica" "/> <br/> <form:label path=”kod">Ulica</form:label> <form:input path=”kod" "/> <br/> </spring:nestedPath> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  44. spring:message <spring:message code=”opis.uzytkownik.imie"/> <spring:message code=”miejscowosc"var=”miejscowosc" /> <display:column title="${miejscowosc}”> ... Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  45. form:form <form:form name="nazwa" modelAttribute=”uzytkownikCommand" method="POST” > ... </form:form> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  46. form:input (I) imię:<form:input path=”uzytkownik.imie" /> nazwisko:<form:input path=”uzytkownik.nazwisko" /> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  47. form:input (II) • path • disabled • size, maxlength • id, title • onblur, onchange, onclick, ondblclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onselect • cssClass, cssErrorClass, cssStyle Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  48. form:password <form:password path="newhaslo1" /> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  49. form:checkbox <form:checkbox path=”uzytkownik.aktualny"/> Sport: <form:checkbox path=”uzytkownik.zainteresowania" value=”sport"/> Gry: <form:checkbox path="uzytkownik.zainteresowania” value=”gry"/> Inne: <form:checkbox path="uzytkownik.zainteresowania” value=”inne"/> TV: <form:checkbox path="uzytkownik.abonament" value=”tv"/> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  50. form:checkboxs <form:label path="odbiorcy">Wyślij wiadomość do: </form:label> <form:checkboxes items="${uzytkownicy}" itemLabel="label" itemValue="id" path="odbiorcy" delimiter="<br/>” /> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

More Related