Spring MVC.

Slides:



Advertisements
Podobne prezentacje
Klasyfikacja roczna w roku szkolnym 2012/2013
Advertisements

POWIAT MYŚLENICKI Tytuł Projektu: Poprawa płynności ruchu w centrum Myślenic poprzez przebudowę skrzyżowań dróg powiatowych K 1935 i K 1967na rondo.
Liczby pierwsze.
Domy Na Wodzie - metoda na wlasne M
Model – View - Controler
Tworzenie ASP.NET Web Form
NOWE TECHNOLOGIE NA USŁUGACH EDUKACJI Publiczna Szkoła Podstawowa nr 3 w Grodkowie Zajęcia w ramach projektu NTUE.
Ksantypa2: Architektura
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007.
Hibernate Klasy trwałe
Prezentacja poziomu rozwoju gmin, które nie korzystały z FS w 2006 roku. Eugeniusz Sobczak Politechnika Warszawska KNS i A Wykorzystanie Funduszy.
Projektowanie warstwy serwera Współpraca z XML. Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu.
Odwzorowania relacyjno-obiektowe Hibernate Klasy trwałe.
Projektowanie warstwy serwera DisplayTag. Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu.
Projektowanie warstwy serwera Acegi. Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego.
Projektowanie warstwy serwera Spring MVC - uzupełnienie.
Hibernate relacje.
Spring podstawy.
Projektowanie warstwy serwera Znaczniki jsp. Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu.
Hibernate uzupełnienie
Projektowanie warstwy serwera Wprowadzenie. Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu.
Klamki do drzwi Klamki okienne i inne akcesoria
Matura 2005 Wyniki Jarosław Drzeżdżon Matura 2005 V LO w Gdańsku
Wprowadzenie do JSP Copyright © Politecnico di Milano September 2003 Translation: Kamil Żyła, Politechnika Lubelska.
Podstawy C# Grupa .NET PO.
Ogólnopolski Konkurs Wiedzy Biblijnej Analiza wyników IV i V edycji Michał M. Stępień
»Spring Framework i nie tylko
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
PIO 3_2, Zofia Kruczkiewicz1 Wykład 3 – część druga Iteracyjno-rozwojowy cykl oprogramowania 3.
VI przegląd plastyczny z rysunku, malarstwa i rzeźby
Programowanie obiektowe – zastosowanie języka Java SE
Seminarium problemowe
1. Pomyśl sobie liczbę dwucyfrową (Na przykład: 62)
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 8.
Analiza matury 2013 Opracowała Bernardeta Wójtowicz.
Systemy zarządzania treścią Wykład 5
Spływ należności w Branży Elektrycznej
Wstępna analiza egzaminu gimnazjalnego.
EGZAMINU GIMNAZJALNEGO 2013
EcoCondens Kompakt BBK 7-22 E.
EcoCondens BBS 2,9-28 E.
Programowanie w języku C++
Projekt Badawczo- Rozwojowy realizowany na rzecz bezpieczeństwa i obronności Państwa współfinansowany ze środków Narodowego Centrum Badań i Rozwoju „MODEL.
User experience studio Użyteczna biblioteka Teraźniejszość i przyszłość informacji naukowej.
WYNIKI EGZAMINU MATURALNEGO W ZESPOLE SZKÓŁ TECHNICZNYCH
J A V A S C R I P T Obiekty Opracowała: Anna Śmigielska.
Wstęp - Prosta aplikacja internetowa w technologii Java EE 5 Programowanie komponentowe 1.
Testogranie TESTOGRANIE Bogdana Berezy.
Jak Jaś parował skarpetki Andrzej Majkowski 1 informatyka +
1 Używanie alkoholu i narkotyków przez młodzież szkolną w województwie opolskim w 2007 r. Na podstawie badań przeprowadzonych przez PBS DGA (w pełni porównywalnych.
Technologie internetowe Wykład 7 Kontrola danych użytkownika.
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
Współrzędnościowe maszyny pomiarowe
ANKIETA ZOSTAŁA PRZEPROWADZONA WŚRÓD UCZNIÓW GIMNAZJUM ZPO W BORONOWIE.
Elementy geometryczne i relacje
Strategia pomiaru.
LO ŁobżenicaWojewództwoPowiat pilski 2011r.75,81%75,29%65,1% 2012r.92,98%80,19%72,26% 2013r.89,29%80,49%74,37% 2014r.76,47%69,89%63,58% ZDAWALNOŚĆ.
Piotr Czapiewski Wydział Informatyki ZUT Wykład 2.
Sabre academy Wstęp do Angular.js I Spring Boot
Obiekty DOM.
SERWIS PORTALU ONTOLOGICZNEGO DEDYKOWANY DLA SYSTEMU OCS.
Odwzorowania relacyjno-obiektowe Hibernate preselekcja.
Odwzorowania relacyjno-obiektowe Hibernate Podstawy.
Wzorce Projektowe w JAVA
AJAX w PHP.
Programowanie Obiektowe – Wykład 6
(według:
Programowanie Obiektowe – Wykład 2
Wstęp - Prosta aplikacja internetowa w technologii Java EE 5
PGO - Projektowanie i implementacja pierwszych klas
Zapis prezentacji:

Spring MVC

Konfiguracja środowiska Kontroler 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

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

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

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

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> </bean> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Kontroler to główny punk obsługi żądań na akcje. 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

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

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

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

@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

@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

@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

@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

@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

@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

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

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

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

@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

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

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

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

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

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

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

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

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

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

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

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

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

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

value = "<%=TypDostepu.ADMINSTRATOR %>" var = ”admin” /> 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

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

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

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

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

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

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

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

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

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" "/> </spring:nestedPath> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

<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

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

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

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

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

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

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

form:radiobutton Płeć:<br/> Mężczyzna: <form:radiobutton path=”uzytkownik.plec" value="M"/> <br/> Kobieta: <form:radiobutton path=”uzytkownik.plec" value="F"/> <br/> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

<form:radiobuttons items="<%=TypRegulacji.values()%>" itemLabel="label” path="typ" delimiter="<br>" /> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

<form:textarea path=”uzytkownik.opis" rows="3" cols="20" /> <form:errors path=”uzytkownik.opis" /> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

form:select, form:option, form:options (I) Wykształcenie <form:select path=”uzytkownik.wyksztalcenie" items="${wyksztalcenieList}"/> <form:select path="uzytkownik.wyksztalcenie"> <form:option value=”Podstawowe"/> <form:option value=”Średnie"/> <form:option value=”Wyższe"/> </form:select> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

form:select, form:option, form:options (II) <form:label path="uzytkownik.wydzial">Wydział</form:label> <form:select path="uzytkownik.wydzial"> <form:option value="-1" label="-"/> <form:options items="${wydzialLista}" itemLabel="nazwa" itemValue="id"/> </form:select> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

spring:bind <spring:bind path=”uzytkownikCommand.wyksztalcenie_id"> <select size="1" name=”wyksztalcenie_id"/> <c:forEach var=”wyksztalcenie" items="${wyksztalcenieLista}"> <option value="${wyksztalcenie.id}" <c:if test="${uzytkownikCommand.wyksztalcenie_id==wyksztalcenie.id}"> SELECTED </c:if>> <c:out value="${wyksztalcenie.nazwa}"/> </option> </c:forEach> </select> </spring:bind> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Typ wyliczeniowy (I) public enum TypPlik { DOC("doc"), PDF("pdf"), JPG("jpg"), XLS("xls"); private final String label; private TypPlik(String label) public String getLabel() Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Typ wyliczeniowy (II) private static Map<String, TypPlik> actionMap; static { actionMap = new HashMap<String,TypPlik>(); for (TypPlik a : TypPlik.values()) actionMap.put(a.label, a); } public static TypPlik get(String label) { return actionMap.get(label); } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Typ wyliczeniowy (III) public String getOpisResponse() { if (this == TypPlik.DOC) return "application/msword"; if (this == TypPlik.JPG) return "image/jpg"; if (this == TypPlik.PDF) return "application/pdf"; if (this == TypPlik.XLS) return "application/excel"; return ""; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

<%@ page import=”przyklad.types.Typ"%> Typ wyliczeniowy (IV) <%@ page import=”przyklad.types.Typ"%> <form:select path="typ"> <form:options items="<%=Typ.values()%>" itemLabel=”label"/> </form:select> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Internacjonalizacja MessageSource (I) <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basename" value="messages" /> </bean> <bean id="fixedLocaleResolver" class="org.springframework.web.servlet.i18n.FixedLocaleResolver"> <property name="defaultLocale" value="pl" /> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Internacjonalizacja MessageSource (II) <bean id="messageSource" class="org.springframework.context. support.ReloadableResourceBundleMessageSource"> <property name="basenames"> <list> <value>WEB-INF/text/errorMessages</value> <value>WEB-INF/text/mailMassages</value> </list> </property> <property name="defaultEncoding" value="utf-8" /> </bean> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Internacjonalizacja - przykład (I) typeMismatch.java.lang.Integer = Niepoprawny format dla liczby typeMismatch.java.math.Float = Niepoprawny format dla liczby typeMismatch.java.util.Date = Format daty niepoprawny typeMismatch = Niepoprawny format danej error.invalidArguments = Nieprawidłowe wartości parametrów error.security.brakUprawnien = Brak uprawnień Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Internacjonalizacja - przykład (II) form.page.title = Dodawanie aktualności form.title = Tytuł form.abstract = Nagłówek aktualności: form.position = Kolejność na liśie: form.active = Aktywny form.date = Data(RRRR-MM-DD): form.submit = Zapisz opis.uzytkownik.imie = imię Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Walidator - przykład (I) public class UzytkownikValidator implements Validator { public boolean supports(Class c) { return Uzytkownik.class.equals(c); } public void validate(Object object, Errors error) Uzytkownik uzytkownik = (Uzytkownik) object; ValidationUtils.rejectIfEmpty(error, ”imie", ”pole.required"); if (uzytkownik.getWiek() < 0) error.rejectValue(”wiek", ”pole.ujemne"); if (uzytkownik.getWiek() > 110) error.rejectValue(”wiek", "too.stary"); }} Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Walidator - przykład (II) if (errors.getErrorCount() == 0) { if (uzytkownik.getLogin().length()>100) errors.rejectValue("uzytkownik.login", "error.field.tooLong",new Object[]{"100”},""); } error.field.tooLong = Pole może zawierać nie więcej niż {0} znaków. Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Walidator - przykład (III) if (nip.length() != 10) .... ; int[] waga = {6,5,7,2,3,4,5,6,7}; int sumaKontrolna = new Integer(nip.substring(nip.length() - 1)).intValue(); int sumaLiczona = 0; for (int i = 0; i < nip.length() - 1; ++i) sumaLiczona += Integer(String.valueOf(nip.charAt(i))).intValue()*waga[i]; sumaLiczona = sumaLiczona % 11; if (sumaLiczona != sumaKontrolna) ...... ; int[] wagaPESEL= {1,3,7,9,1,3,7,9,1,3}; sumaLiczona = 10 - sumaLiczona % 10; // 10 >> 0 Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Walidator - przykład (IV) String napis = numerRachunku.substring(2) + "2521" + numerRachunku().substring(0, 2); String napisCzesc = napis.substring(0, 6); Integer liczba = Integer.valueOf(napisCzesc); napisCzesc = Integer.toString(liczba % 97) + napis.substring(6, 12); liczba = Integer.valueOf(napisCzesc); napisCzesc = Integer.toString(liczba % 97) + napis.substring(12, 18); napisCzesc = Integer.toString(liczba % 97) + napis.substring(18, 24); napisCzesc = Integer.toString(liczba % 97) + napis.substring(24, 30); liczba = Integer.valueOf(napisCzesc) % 97; if (liczba.intValue() != 1) ... Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

BindingResult (errors) (I) errors.getErrorCount(); errors.getAllErrors(); errors.getFieldErrors(); errors.getGlobalErrors(); errors.setNestedPath("uzytkownik"); errors.pushNestedPath(”uzytkownik"); errors.popNestedPath(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

BindingResult (errors) (II) errors.pushNestedPath(”adresZamieszkania"); adresValidator.validate(uzytkownik.getAdresZamieszkania, errors); if (errors.getErrorCount() == 0) { ..... } errors.popNestedPath(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

form:errors ValidationUtils.rejectIfEmptyOrWhitespace(errors, ”imie", "required", ”Pole jest wymagane"); Imię: <form:input path=”imie" /> <form:errors path=”imie" /> <input type="submit" value=”zapisz" /> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Walidator - błąd globalny errors.reject("error.sumaKontrola"); <spring:hasBindErrors name=”uzytkownikCommand"> <c:forEach items="${errors.globalErrors}" var="error"> <spring:message code="${error.code}"/> </c:forEach> </spring:hasBindErrors> <form:errors path="*" /> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Walidator - walidatory standardowe if (EmailValidator.getInstance().isValid(uzytkownik.getEmail()) == false) { errors.rejectValue(”uzytkownik.email","error.email.invalid"); } DateValidator UrlValidator Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Upload plików (I) <bean id="multipartResolver" class="org.springframework.web. multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize"> <value>107374182400</value> <!-- 100MB --> </property> </bean> binder.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor()); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Upload plików (II) <label>Zapisz plik wzoru:</label> <input id="plik" name="plik" type="file"> <br> <form:form modelAttribute=”ksiazkaCommand" enctype="multipart/form-data" method="POST"> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Upload plików (III) @Lob private byte[] plikWBazie; MultipartFile plik; plik = ((MultipartRequest)request).getFile("plik"); plik.getOriginalFilename() plik.getBytes(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Download plików (I) <c:if test="${not empty ksiazkaCommand.ksiazka.plik}"> <a href="<c:url value="plik.html?id=${ksiazkaCommand.ksiazka.id}"/>" target="_blank">Pobierz plik </a> </c:if> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Download plików (II) @RequestMapping(value = "plik.html") public void pobierzPlik(HttpServletResponse response) { int id = ServletRequestUtils.getIntParameter(request, ”id", -1); Ksiazka ksiazka = ksiazkaService.pobierzPlik(id); response.setContentType(ksiazka.getMimeType()); response.setHeader("Content-Disposition", "inline; filename="+ ksiazka.getNazwa() + "." + ksiazka.getRozszerzenie()); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Download plików (III) OutputStream os = response.getOutputStream(); os.write(ksiazka.getPlik()); os.flush(); os.close(); } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Spring 2.5 - Mapowanie adresów url <bean name="insertUzytkownik" class=”przyklad.InsertUzytkownik"> <property name="uzytkownikDAO" ref="uzytkownikDAO" /> </property> </bean> <bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/admin/insertUzytkownik.htm">insertUzytkownik</prop> </props> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Spring 2.5 - kontrolery Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Spring 2.5 - przykładowy kontroler public class PrzykładowyController extends AbstractController { public ModelAndView handleRequestInternal( HttpServletRequest request, HttpServletResponse response) throws Exception ModelAndView mav = new ModelAndView("hello"); mav.addObject("message", "Hello World!"); return mav; } bean id="sampleController" class="samples.SampleController"> </bean> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Spring 2.5 - kontroler (konstruktor) public editUzytkownik() { super(); setCommandClass(UzytkownikCommand.class); setCommandName(”uzytkownikCommand"); setBindOnNewForm(true); setSessionForm(true); } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Spring 2.5 - kontroler (parametry widoku) <bean name="slownikRekordController" class="controller.slownik.SlownikRekordController"> <property name="formView" value="slownikRekord"/> <property name="successView” value="slownikLista"/> </bean> String getSuccessView(); String getFormView(); setSuccessView(String successView); setFormView(String formView); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Spring 2.5 - kontroler (start formularza) 1. formBackingObject 2. initBinder 3. onBindOnNewForm (setBindOnNewForm(true)) 4. showForm 4a. referenceData Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Spring 2.5 - kontroler (submit formularza) 1. formBackingObject (jeżeli setSessionForm(false)) 2. handleInvalidSubmit 3. onBind 4. Walidacja 5. onBindAndValidate 6. processFormSubmission 7. onSubmit (albo showForm) Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Spring 2.5 - kontroler (onSubmit) protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, org.springframework.validation.BindException errors) throws Exception { RedirectView rv; Uzytkownik uzytkownik = (Uzytkownik) command; uzytkownikService.persist(uzytkownik); rv = new RedirectView("editUzytkownik.htm?id="+uzytkownik.getId()"); rv.setContextRelative(true); return new ModelAndView(rv); } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Spring 2.5 - AbstractWizardFormController (I) lista widoków wchodzących w skład wizarda status: finish, cancel, page_change przechodzenie pomiędzy widokami w wizardzie (nawet gdy walidacja sie nie powiodła – "dirty back", "dirty forward") zmiana kolejności stron / omijanie wybranych stron bieżący widok zapisany w sesji Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Spring 2.5 - AbstractWizardFormController (II) postProcessPage processFinish processCancel suppressValidation validatePage getInitialPage Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Wizard - jsp (I) <c:choose> <c:when test="${uzytkownikCommand.uzytkownik.id == 0}"> Rejestracja uzytkownika.</c:when> <c:otherwise>Edycja uzytkownika: ${uzytkownikCommand.uzytkownik.label}</c:otherwise> </c:choose> Strona ${page} z 5: ${pageTitleList[page]} Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Wizard - jsp (II) <c:url value="editUzytkownik.htm" var="adresurl"/> <form:form action="${adresurl}"> .... </form:form> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Wizard - jsp (III) <input name="page" type="submit" value=”page1" /> ... <c:forEach items="${pageTitleList}" var="pageTitle" varStatus=”loop"> <c:choose> <c:when test="${page eq loop.index}"> <button type="submit" name="page" value=”${loop.index}" cssClass="button_selected">${pageTitle}</button> </c:when> <c:otherwise> <button type="submit" name="page" value=”${loop.index}" cssClass="button">${pageTitle}</button> </c:otherwise> </c:choose> </c:forEach> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

// nagłówek widoczny nad każdą stroną <br /> Wizard - jsp (IV) // blok globalError // nagłówek widoczny nad każdą stroną <br /> <jsp:include page="${pageList[page]}.jsp" /> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Wizard - jsp (V) <s:button type="submit" value=”prev" name=”page" <input name=”prev" type="submit" value="Poprzedni" /> <input name=”next" type="submit" value=”Następny" /> <s:button type="submit" value=”prev" name=”page" disabled="${page le 0}"> Poprzednia strona</s:button> <s:button type="submit" value=”next" name="page" disabled="${page ge pageCount-1}"> Nastęna strona</s:button> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Tabela - obiekt Command (I) public class UzytkownikCommand { Uzytkownik uzytkownik; Dziecko dziecko = new Dziecko(); private int dzieckoIndex = -1; ...... Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Tabela - obiekt Command (II) public boolean isNewDziecko() { return pozycjaIndex < 0; } public void zmienDziecko() { if (isNewDziecko()) uzytkownik.getDzieci().add(dziecko); else uzytkownik.getDzieci().get(dzieckoIndex).clone(dziecko); dziecko = new Dziecko(); //inicjalizacja dzieckoIndex = -1; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Tabela - obiekt Command (III) public void edytujDziecko(int index) { dzieckoIndex = index; dziecko = new Dziecko(); dziecko.clone(uzytkownik.getDzieci().get(index)); } public void usunDziecko(int index) dziecko.getDzieci().remove(index); dzieckoIndex = -1; Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Tabela - kontroler int row = ServletRequestUtils.getIntParameter(request, "row", -1); if ("zapisz".equals(akcja)) uzytkownikCommand.zmienDziecko(); if ("edycja".equals(akcja)) { if (row == -1) return; uzytkownikCommand.edytujDziecko(row); } if ("usun".equals(akcja)) uzytkownikCommand.usunDziecko(row); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Tabela - jsp (I) <center><big><form:errors path=”uzytkownik.dzieci" cssClass="error_field"/></big></center> <display:table id=”dziecko" list="${uzytkownikCommand.uzytkownik.dzieci}"> <display:column title=""> <input type="radio" name="row" value="${dziecko_rowNum-1}" /> </display:column> <display:column title=”Imię" property=”imie"/> </display:table> <button type="submit" value="edycja” name=”page">Edycja</button> <button type="submit" value="usun" name=”page">Usuń</button> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Tabela - jsp (II) <spring:nestedPath path=”dziecko"> imię:<form:input path=”imie" /> </spring:nestedPath> <button type="submit" value="zapisz" name=”page”> ${uzytkownikCommand.newDziecko ? 'Dodaj' : 'Zapisz'} </button> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego