170 likes | 387 Views
JAVA – JSP. JAVA BEANS. Java EE training: http://courses.coreservlets.com. Java Beans. Muszą posiadać konstruktor domyślny Dostęp do prywatnych pól składowych jest realizowany przez funkcje: getNAZWAPOLA setNAZWAPOLA (oznacza to zdefiniowanie właściwości-property w klasie)
E N D
JAVA – JSP JAVA BEANS Java EE training: http://courses.coreservlets.com
Java Beans • Muszą posiadać konstruktor domyślny • Dostęp do prywatnych pól składowych jest realizowany przez funkcje:getNAZWAPOLAsetNAZWAPOLA(oznacza to zdefiniowanie właściwości-property w klasie) • Pola typu logicznego są wykorzystują funkcję isNAZWAPOLA • Muszą być umieszczane w pakietach
Przykład (NetBeans) public class MyBeam implements Serializable { public static final String PROP_SAMPLE_PROPERTY = "sampleProperty"; private String sampleProperty; private PropertyChangeSupport propertySupport; public MyBeam() { propertySupport = new PropertyChangeSupport(this); } public String getSampleProperty() { return sampleProperty; } public void setSampleProperty(String value) { String oldValue = sampleProperty; sampleProperty = value; propertySupport.firePropertyChange(PROP_SAMPLE_PROPERTY, oldValue, sampleProperty); } public void addPropertyChangeListener(PropertyChangeListener listener) { propertySupport.addPropertyChangeListener(listener); } public void removePropertyChangeListener(PropertyChangeListener listener) { propertySupport.removePropertyChangeListener(listener); } }
Schemat użycia Użytkownik zatwierdza dane na formularzu (stronie JSP) <FORM ACTION="SomePage.jsp"> Strona JSP Tworzy obiektJavaBean <jsp:useBean id="myBean" class="…"/> Następuje ustawienie właściwości obiektu wykorzystując dane przesłane w żądaniu <jsp:setProperty name="myBean„ property="customerID" value="…"/> • Wartości wynikowe pobierane są też przez właściwości <jsp:getProperty name="myBean" property="bankAccountBalance"/>
jsp:useBean Format <jsp:useBean id="name" class="package.Class" /> Wynik Tworzy obiekt lub pobiera referencję do istniejącego obiektu bez bezpośredniego pisania kodu Uwagi Wywołanie: <jsp:useBean id="book1" class="coreservlets.Book" /> Może być interpretowane jako wywołanie skrypletu: <% coreservlets.Book book1 = new coreservlets.Book(); %> Zalety użycia JavaBeans: • Łatwiej ustawiać wartości w obiektach parametrami żądania • Łatwiej wykorzystywać obiekty na różnych stronach
jsp:setProperty Format <jsp:setProperty name="name" property="property" value="value" /> Wynik Ustawienie właściwości obiektu przez wywołanie metody setXXX Uwagi <jsp:setProperty name="book1" property="title" value="Tytuł 1" /> Może być interpretowane jako wywołanie skrypletu <% book1.setTitle(" Tytuł 1 "); %> Przykład: <jsp:setProperty name="MyBean1" property="sampleProperty" value="10" /> Kod wynikowy: org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper( _jspx_page_context.findAttribute("MyBean1"), "sampleProperty", "10", ..... );
jsp:getProperty Format <jsp:getProperty name="name" property="property" /> Wynik Uzyskanie dostępu do właściwości obiektu przez niejawne wywołanie funkcji getName Uwagi <jsp:getProperty name="book1" property="title" /> Może być interpretowane jako: <%= book1.getTitle() %> Przykład: <jsp:getProperty name="MyBean1" property="sampleProperty" /> Kod wynikowy: org.apache.jasper.runtime.JspRuntimeLibrary.toString( ( ((MyElements.MyBeam)_jspx_page_context.findAttribute("MyBean1")).getSampleProperty() )
Konwersje i przypisania Przypisanie wartości typu string <jsp:useBean id="entry" class="coreservlets.SaleEntry" /> <%-- setItemID oczekuje na obiekt typu string --%> <jsp:setProperty name="entry" property="itemID" value='<%= request.getParameter("itemID") %>' /> Przypisanie wartości typu int <% int numItemsOrdered = 1; try { numItemsOrdered = Integer.parseInt(request.getParameter("numItems")); } catch(NumberFormatException nfe) {} %> <%-- setNumItems potrzebuje wartości typu int --%> <jsp:setProperty name="entry" property="numItems" value="<%= numItemsOrdered %>" />
Przypisanie poszczególnych właściwości parametrami żądania <jsp:useBean id="entry" class="coreservlets.SaleEntry" /> <jsp:setProperty name="entry" property="itemID" param="itemID" /> <jsp:setProperty name="entry" property="numItems" param="numItems" /> <jsp:setProperty name="entry" property="discountCode" param="discountCode" />
Zbiorowe ustawienie właściwości obiektu Java Bean parametrami żądania <jsp:useBean id="entry" class="coreservlets.SaleEntry" /> <jsp:setProperty name="entry" property="*" /> Uwagi: Mechanizm ten umożliwa tworzenie tzw obietów „form beans”, których właściwości są wypełniane z formularzy stworzonych na stronach www Można podzielić proces wypełniania obiektu pomiedzy wiele formularzy (każdy służy do wypełnienia fragmentu zestawu właściwości)
Współdzielnie obiektów Java Beans miedzy stronami „jsp” • Atrybut scope służ do określenia dodatkowego miejsca przechowywania zmiennej typu JavaBeam • Zmienna tak jest dodatkowo dostępna jako lokalna dla metody _ jspService Still also bound to local variable in _ • <jsp:useBean id="…" class="…" scope="…" /> • Wartości: • application • page • request • session • • Umożliwiono w ten sposób współdzielenie danych miedzy stronami jsp • • Obiekt tworzony jest warunkowo (jeśli nie istniał)
• page <jsp:useBean … scope="page"/> lub <jsp:useBean…> Wartość domyślna. Obiekt jest umieszczany w PageContex na czas trwania żądania. Pozwala metodom w bieżącym servlecie korzytać z obiektu • application <jsp:useBean … scope="application"/> Obiekt jest składowany w obiekcie ServletContext, do którego dostęp można uzyskać wywołując metodę: getServletContext()). ServletContext jest współdzielony przez wszystkie servlety w ramach aplikacji webowej lub pomiedzy wszystkimi servletami na serwerze www jeśli żadna aplikacja webowa nie jest zdefiniowana na serwerze www • session <jsp:useBean … scope="session"/> Obiektjest przechowywany w obiekcie HttpSession związanym z bieżącym żądaniem z kąd może być dostępny dla zwykłego kodu servletu. Obiekt ten jest dostępny przez funkcje getAttribute i setAttribute • request <jsp:useBean … scope="request"/> Obiekt jest umieszczany w obiekcie ServletRequest na czas trwania bieżącego żądania, gdzie jest dostępny za pomocą funkcji getAttribute
Jsp:useBean scope="... " <jsp:useBean id="MyBean1" scope= "page" class="MyElements.MyBeam" /> synchronized (_jspx_page_context) { MyBean1 = (MyElements.MyBeam) _jspx_page_context.getAttribute("MyBean1", PageContext.PAGE_SCOPE); if (MyBean1 == null){ MyBean1 = new MyElements.MyBeam(); _jspx_page_context.setAttribute("MyBean1", MyBean1, PageContext.PAGE_SCOPE); } } <jsp:useBean id="MyBean1" scope="session" class="MyElements.MyBeam" /> synchronized (session) { MyBean1 = (MyElements.MyBeam) _jspx_page_context.getAttribute("MyBean1", PageContext.SESSION_SCOPE); if (MyBean1 == null){ MyBean1 = new MyElements.MyBeam(); _jspx_page_context.setAttribute("MyBean1", MyBean1, PageContext.SESSION_SCOPE); } }
Współdzelenie obiektów Java Beans przykład • page1.jsp <jsp:useBean id="MyBean1" class="…" scope="application"/> <jsp:setProperty name=" MyBean1 " property="sampleProperty" value="Hello"/> <jsp:getProperty name="foo" property="message"> • page2.jsp <jsp:useBean id=" MyBean1 " class="…" scope="application"/> <jsp:getProperty name=" MyBean1 " property="sampleProperty">
Operacje warunkowe z wykorzysaniem JavaBeans • Obiekt Java bean jest tworzony tylko w tedy jeśli nie istnieje już instancja obiektu o takiej nazwie w zdefiniowanym zakresie. To znaczy, że element.: jsp:useBean utworzy nowy obiekt tylko w tedy gdy on jeszcze nie istnieje. W przeciwnym przypadku ustawiana jest po prostu referencja na istniejący obiekt.Tę włąściwość można wykorzystać do zaimplementowania operacji warunkowych. Stosujęąc pełny zapis XML znacznik: <jsp:useBean ... /> Przedstawiamy w postaci: <jsp:useBean ...>Wyrazenie</jsp:useBean> gdzie wyrażenie może zawierać instrukcjejsp:setProperty. Takim przypadku "Wyrażenie” jest wywoływane tylko jeśli tworzony jest nowy obiekt
Wykorzystanie JavaBeans Podsumowanie • jsp:useBean Utworzenie nowego lub utworzenie referencji do istniejącego obiektu JavaBean • <jsp:useBean id="beanName" class="package.Class" /> • jsp:setPropertyElement służy do modyfikacji właściwości (property) obiektu JavaBean (wywołuje metodę setXXX) <jsp:setProperty name="beanName" property="propertyName” value="propertyValue" /> • jsp:getPropertyElement służy do odczytu właściwości obiektu JavaBean<jsp:getProperty name="beanName" property="propertyName" />