Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Spring MVC.

Podobne prezentacje


Prezentacja na temat: "Spring MVC."— Zapis prezentacji:

1 Spring MVC

2 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

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

7 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

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(”uzytkownikList”) //@SessionAttributes
public class UzytkownikListController { ... } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

10 sessionStatus.setComplete();
@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 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/{ }") public void String String ) 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 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

35 <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

36 <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

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

44 <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

51 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

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

53 <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

54 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

55 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

56 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

57 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

58 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

59 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

60 <%@ 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

61 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

62 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

63 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

64 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

65 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

66 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

67 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

68 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

69 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

70 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

71 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

72 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

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

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

75 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

76 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

77 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

78 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

79 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

80 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

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

82 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

83 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

84 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

85 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

86 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

87 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

88 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

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

90 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

91 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

92 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

93 // 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

94 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

95 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

96 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

97 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

98 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

99 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

100 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


Pobierz ppt "Spring MVC."

Podobne prezentacje


Reklamy Google