Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
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
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.