Transcript Java 9

JAVA – JSP
JAVA BEANS
Java EE training: http://courses.coreservlets.com
181
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)
Pola typu logicznego są wykorzystują funkcję
isNAZWAPOLA
Muszą być umieszczane w pakietach
182
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);
}
}
183
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"/>
184
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
185
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",
..... );
186
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()
)
187
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 %>" />
188
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"
/>
189
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)
190
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ł)
191
• 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"/>
Obiekt jest 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
192
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);
}
}
193
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">
194
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ć instrukcje jsp:setProperty. Takim przypadku "Wyrażenie”
jest wywoływane tylko jeśli tworzony jest nowy obiekt
195
Wykorzystanie JavaBeans
Podsumowanie
•jsp:useBean
Utworzenie nowego lub utworzenie referencji do istniejącego obiektu
JavaBean
<jsp:useBean id="beanName" class="package.Class" />
•jsp:setProperty
Element 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:getProperty
Element służy do odczytu właściwości obiektu JavaBean
<jsp:getProperty name="beanName"
property="propertyName" />
196