[ Pobierz całość w formacie PDF ]
.Bardzo ³atwo pomyliæ sposobykodowania lub zapomnieæ o „zamykaj¹cych” blokach JSP; XSP wymusza zamkniêcieka¿dego otwartego elementu (standardowe poprawne formatowanie XML-a), a jedenblok kodu odpowiada jednemu elementowi.Po wprowadzeniu struktur logicznych nale¿y ju¿ tylko zinterpretowaæ parametry¿¹dania.Do tego celu s³u¿y wbudowana zmienna XSP request, ktora „naœladuje”obiekt HttpServletRequest.Kod po wprowadzeniu poni¿szych modyfikacjiodczytuje wartoœæ parametrów userRole i password (jeœli istniej¹); wartoœæ tanastêpnie jest porównywana z rolami, które maj¹ prawo do obejrzenia komentarza(autor i redaktor).Jeœli dopasowanie siê powiedzie, sprawdzane jest jeszczehas³o.Jeœli has³o odpowiada kluczowi podanej roli, zmienna boolowska jestw³¹czana (wartoœæ true), a element authorComments stanowi czêœæ danychwyjœciowych XML:boolean authorOrEditor = false;// Poni¿ej sprawdzimy, czy to autor czy redaktor}if (authorOrEditor) {Czy ten akapit jest poprawnie sformatowany, czyrozdzielamy go na dwa oddzielne akapity? Mike, poinformuj mnie oswojej decyzji w tym zakresie.}Czytelnik winien zauwa¿yæ, ¿e spory fragment instrukcji logicznych zosta³ ujêtyw znacznik CDATA.Trzeba pamiêtaæ, ¿e XSP zawsze jest przetwarzane jako XML imusi byæ zgodne z zasadami tego standardu; ale cudzys³owy i „ampersandy”(symbole &apm;) u¿ywane we fragmentach w Javie nie s¹ dozwolone w XML-u;zamiast wiêc znosiæ ich specjalne znaczenie i wprowadzaæ ogromne zamieszanie,nale¿y u¿yæ znacznika CDATA, w którym mo¿na sobie spokojnie pisaæ w Javie.Bezniego kod wygl¹da³by nastêpuj¹co:boolean authorOrEditor = false;String[] roleValues =request.getParameterValues("userRole");String[] passwordValues = request.getParameterValues("password");if ((roleValues != null) && (passwordValues != null)) {String userRole = roleValues[0];String password = passwordValues[0];if (userRole.equals("author") &&password.equals("brett")) {authorOrEditor = true;} elseif (userRole.equals("editor") &&password.equals("mike")) {authorOrEditor = true;}}.Teraz mo¿na przetestowaæ stronê „wejœciow¹” i dokument PDF powsta³y z danychXML.Po „skierowaniu” przegl¹darki na stronêhttp://://entry.html Czytelnik powinien uzyskaæ wynikpodobny do tego na rysunku 9.7.Rysunek 9.7.„Wejœciowa” strona HTMLWybieramy rolê autora i podajemy has³o „brett” albo rolê redaktora i has³o„mike”.W obu przypadkach uzyskamy dokument PDF przedstawiony na rysunku 9.8.Rysunek 9.8.Wygenerowany dokument PDF z komentarzamiTrzeba ju¿ tylko odizolowaæ instrukcje logiczne od samej zawartoœci.Podobniejak w JSP mo¿liwe jest w³¹czanie obiektów JavaBean i tym samym oddzielaniezawartoœci i prezentacji od logiki aplikacji, XSP umo¿liwia tworzenie bibliotekznaczników.PóŸniej, za pomoc¹ znaczników XML, uruchamiany jest odpowiedni kodznajduj¹cy siê wewn¹trz takiej biblioteki.Biblioteki znaczników XSPOprócz wyœwietlenia komentarzy, nale¿y równie¿ zaznaczyæ, ¿e ogl¹dany rozdzia³to wersja robocza; oprócz tego powinna zostaæ wyœwietlona data zmian w wersjiroboczej (która zostanie „zamro¿ona” po ukoñczeniu rozdzia³u).Zamiastdopisywaæ kod Javy ³aduj¹cy bie¿¹c¹ datê, mo¿na stworzyæ do tego celu w³asn¹bibliotekê znaczników.Przy okazji Czytelnik dowie siê, jak stworzyæ elementXSP pobieraj¹cy numer i tytu³ rozdzia³u, a nastêpnie formatuj¹cy odpowiedninag³Ã³wek.Za pomoc¹ tej funkcji mo¿na obs³u¿yæ równie¿ wspomnian¹ operacjê nadacie.Najpierw konieczne jest utworzenie biblioteki znaczników dostêpnej znaszej strony XSP.Wiêksza czêœæ takiej biblioteki oparta jest na arkuszu styluXSL.Zaczniemy od szkieletu pokazanego w przyk³adzie 9.11, który po prostuprzekazuje wszystkie otrzymane dane na wyjœcie.Szkielet ten zachowamy wpodkatalogu XSL/, w pliku JavaXML.xsp.xsl.Trzeba pamiêtaæ o do³¹czeniudeklaracji przestrzeni nazw JavaXML, poniewa¿ wykorzystamy j¹ do dopasowaniaelementów na naszych stronach XSP.Przyk³ad 9.11.Arkusz logiki XSPDopasowuj¹c znacznik xsp:page gwarantujemy, ¿e wszystkie elementy zostan¹dopasowane i obs³u¿one wewn¹trz tego arkusza stylu (czy te¿, zgodnie znazewnictwem XSP, arkusza logiki).Teraz dodajemy metody Javy do wywo³aniaprzez szablony wewn¹trz arkusza:java.util.Datejava.text.SimpleDateFormatprivate String getDraftDate() {return (new SimpleDateFormat("MM/dd/yyyy")).format(new Date());}private String getTitle(int chapterNum, String chapterTitle) {return "Chapter " + chapterNum + ": " + chapterTitle;}Wprowadzono tutaj szereg nowych elementów XSP.Po pierwsze, elementxsp:structure otacza elementy xsp:include
[ Pobierz całość w formacie PDF ]
Darmowy hosting zapewnia PRV.PL