Spring MVC.

1 Spring MVC ...
Author: Wacław Marcinek
0 downloads 7 Views

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 ModelInterfejs 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) class="org.springframework.web.servlet.view.InternalResourceViewResolver"> /WEB-INF/jsp/ .jsp 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 wojewodztwoList = new ArrayList(); 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 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 ApplicationContextAwarepublic 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) @InitBinderpublic 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 implements Converter { protected GenericDAO dao; public abstract void setDao(GenericDAO 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 implements Converter { .... // 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) 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 value = "<%=TypDostepu.ADMINSTRATOR %>" var = ”admin” /> ... Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

35

c:out
36 Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

37 c:url ">Edit ">Dodaj nowy Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

38 c:when Adres .... Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

39 c:forEach items="${uzytkownikCommand.uzytkownik.dzieci}" var=”dziecko" varStatus="loop” begin=”0” end=”10”> 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 Ulica
Ulica
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

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

46 form:input (I) imię:nazwisko: Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

47 form:input (II) path disabled size, maxlength id, titleonblur, 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 Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

49 form:checkbox Sport: Gry: Inne: TV: Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

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

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

52 itemLabel="label” path="typ" delimiter="
"
/> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

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

54 form:select, form:option, form:options (I)Wykształcenie Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

55 form:select, form:option, form:options (II)Wydział items="${wydzialLista}" itemLabel="nazwa" itemValue="id"/> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

56 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 actionMap; static { actionMap = new HashMap(); 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"%> items="<%=Typ.values()%>" itemLabel=”label"/> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

61 Internacjonalizacja MessageSource (I) class="org.springframework.context.support.ResourceBundleMessageSource"> class="org.springframework.web.servlet.i18n.FixedLocaleResolver"> Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

62 Internacjonalizacja MessageSource (II) class="org.springframework.context. support.ReloadableResourceBundleMessageSource"> WEB-INF/text/errorMessages WEB-INF/text/mailMassages 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ę: Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

72 Walidator - błąd globalnyerrors.reject("error.sumaKontrola"); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

73 Walidator - walidatory standardoweif ( 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) binder.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor()); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

75 Upload plików (II)
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) " target="_blank">Pobierz plik 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 class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> insertUzytkownik 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 kontrolerpublic 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"> 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) 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) Rejestracja uzytkownika. Edycja uzytkownika: ${uzytkownikCommand.uzytkownik.label} Strona ${page} z 5: ${pageTitleList[page]} Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

91 Wizard - jsp (II) .... Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

92 Wizard - jsp (III) ... Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

93 // nagłówek widoczny nad każdą stroną
Wizard - jsp (IV) // blok globalError // nagłówek widoczny nad każdą stroną
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

94 Wizard - jsp (V) disabled="${page le 0}"> Poprzednia strona disabled="${page ge pageCount-1}"> Nastęna strona 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)

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

100 Tabela - jsp (II) imię: Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego