0% au considerat acest document util (0 voturi)
97 vizualizări70 pagini

Java Server Pages

Documentul prezintă tehnologia Java Server Faces ca o tehnologie web care permite crearea de interfețe grafice folosind componente standard și reutilizabile. De asemenea, documentul oferă informații despre modelele arhitecturale ale JSF, tagurile proprii și mecanismele standard pe care le pune la dispoziție. Un exemplu simplu ilustrează implementarea unei aplicații JSF de bază.

Încărcat de

Ruxanda Yarinkowski
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
97 vizualizări70 pagini

Java Server Pages

Documentul prezintă tehnologia Java Server Faces ca o tehnologie web care permite crearea de interfețe grafice folosind componente standard și reutilizabile. De asemenea, documentul oferă informații despre modelele arhitecturale ale JSF, tagurile proprii și mecanismele standard pe care le pune la dispoziție. Un exemplu simplu ilustrează implementarea unei aplicații JSF de bază.

Încărcat de

Ruxanda Yarinkowski
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
Sunteți pe pagina 1/ 70

Tehnologii Java

Curs -
Cristian Fr asinaru
[email protected]
Facultatea de Informatic a
Universitatea Al. I. Cuza Ias i
Java Server Faces
Tehnologii Java p.1/69
Cuprins
Framework-uri Web / MVC
Caracteristici generale JSF
Exemplu simplu
Modelele arhitecturii JSF
Taguri proprii JSF
Folosirea mecanismelor standard
Crearea de componente proprii
Crearea de mecanisme proprii
Tehnologii Java p.2/69
Framework-uri Web / MVC
Tehnologii Java p.3/69
Consideratii generale
Separarea functionalit atilor
Controlul accesului la componente si resurse
Controlul uxului logic al aplicatiei
Validarea datelor
Standardizarea aspectului
Internationalizare
Tratarea exceptiilor
Modularizarea sistemului
Tehnologii Java p.4/69
Model-View-Controller
Tehnologii Java p.5/69
Acces centralizat
Probleme generate de accesul direct la componentele
View:
Duplicarea codului: ecare view trebuie s a ofere
servicii sistem (securitate)
Navigarea: este n responsabilitatea componetelor
View.
Solu tia: Un punct central de acces pentru nivelul de
prezentare responsabil cu: gestiunea cererilor, servicii
sistem: autenticare, autorizare, gestiunea erorilor, etc.
Tehnologii Java p.6/69
Front Controller - Dispatcher
Tehnologii Java p.7/69
Strategii de mapare a resurselor
Mapare explicit a
http://some.server.com/hello.jsp
Mapare logic a
http://some.server.com/hello.jsp hello.do
Mapare multipl a
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<url-pattern>
*
.do</url-pattern>
<servlet-name>
com.some.mvc.framework.FrontController
</servlet-name>
</servlet-mapping>
Tehnologii Java p.8/69
Exemple de framework-uri
Java Server Faces
Apache Struts
Spring
JBoss Seam
Apache Wicket
Google Web Toolkit (GWT)
Altele: Apache Click, Apache Cocoon, AppFuse,
Flexive, Grails, Vaadin, ItsNat, Jspx, Makumba,
OpenXava, OpenLaszlo, Eclipse RAP, Play, Restlet,
Stripes, Tapestry, WebWork, ZK, Wavemaker, etc.
Tehnologii Java p.9/69
Java Server Faces
Tehnologii Java p.10/69
Ce aduce nou JSF ?
Permite crearea UI folosind componente standard,
reutilizabile, accesibile folosind taguri proprii.
Furnizeaz a mecanismul pentru dezvoltarea de
componente proprii.
Ofer a un model de interactiune bazat pe
evenimente.
Separ a prezentarea componentelor de
functionalitate.
Asigur a persisten ta st arii la nivelul Web..
Simplic a modul de crearea a IDE-uri pentru
dezvoltarea de aplicatii Web.
Tehnologii Java p.11/69
Interfata cu utilizatorul
Tehnologii Java p.12/69
Orientat pe componente UI
Tehnologii Java p.13/69
Caracteristici generale
Denirea regulilor de navigare ntre pagini
Validarea datelor
Specicarea regulilor de conversie
Tratarea erorilor
Lucrul cu Bean-uri
Tratarea evenimentelor
Internationalizare
Construit direct pe API-ul servleturilor
PageLanguage:{JSP, Facelets}
Tehnologii Java p.14/69
Separarea activit atilor
Design - editarea paginilor JSP, HTML
Dezvoltare - implementarea logicii aplicatiei
Crearea componentelor UI - componente ce vor
utilizate de designeri pentru realizarea UI
Arhitectur a - asigurarea uxului aplicatiei, a
scalabilit atii, congurare, etc.
Tehnologii Java p.15/69
Implement ari
Versiuni: 1.0 (2004) 1.2 (2006) 2.0 (2009)
Implement ari
Implementarea de referint a (Sun)
Open-Source, Ajax-enabled
ICEFaces
JBoss RichFaces
Apache MyFaces
...
RIA = Rich Internet Applications
Tehnologii Java p.16/69
Exemplu simplu
Tehnologii Java p.17/69
Etapele aplicatiei
Crearea componentelor bean
PersonBean
Scriere paginilor ce vor utiliza componente UI
inputName.xhtml, sayHello.xhtml
Crearea sierului de resurse
Messages.properties
Denirea regulilor de navigare
Tehnologii Java p.18/69
PersonBean
package hello;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean(name = "personBean")
@RequestScoped
public class PersonBean {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Tehnologii Java p.19/69
inputname.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>Hello</title>
</h:head>
<h:body>
<h:form>
Your name:
<h:inputText id="userName"
value="#{personBean.name}"
required="true"/>
<h:commandButton id="submit" value="Submit"
action="sayHello.xhtml"/>
<h:message id="errors" style="color: red"
showSummary="true" showDetail="false"
for="userName"/>
</h:form>
</h:body>
</html>
Tehnologii Java p.20/69
Messages.properties
Fi sierul cu resurse contine localizarea (traducerea)
mesajelor folosite in aplicatie.
title = Simple JSF Application
greeting = Hello
Tehnologii Java p.21/69
sayHello.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<f:loadBundle basename="hello.Messages" var="message"/>
<h:head>
<title>#{message.title}</title>
</h:head>
<h:body>
<h:form>
<h2>
#{message.greeting} #{personBean.name} !
</h2>
<h:commandButton id="back" value="Back" action="inputName.xht
</h:form>
</h:body>
</html>
Tehnologii Java p.22/69
Navigarea
Decupl am regulile de navigare de paginile aplicatiei:
<h:commandButton id="submit" value="Submit" action="sayHello.xhtml"/>
Inlocuim "sayHello.xhtml" cu o actiune abstracta: "hello"
Fi sierul de congurare JSF: faces-cong.xml
<faces-config>
<navigation-rule>
<from-view-id>/inputName.xhtml</from-view-id>
<navigation-case>
<from-outcome>hello</from-outcome>
<to-view-id>/sayHello.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
Tehnologii Java p.23/69
Congurarea aplicatiei: web.xml
<web-app>
<context-param>
<param-name>javax.faces.application.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>
<!-- Faces Servlet -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup> 1 </load-on-startup>
</servlet>
<!-- Faces Servlet Mapping -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/
*
</url-pattern>
</servlet-mapping>
</web-app>
Tehnologii Java p.24/69
Modelele arhitecturii JSF
Tehnologii Java p.25/69
Arhitectura componentelor
Arhitectura componentelor UI include:
Modelul claselor UI
Modelul de prezentare
Modelul de conversie
Modelul de tratare a evenimentelor
Modelul de validare
Tehnologii Java p.26/69
Modelul claselor UI
Descriu functionalitatea componentelor
Extind UIComponent
Implementeaz a diverse interfete comportamentale
Nu denesc o reprezentare grac a
Au notiunea de componente u
UICommand UIForm UIPanel
UIOutput UIInput UIMessage
UIData UIColumn ...
Tehnologii Java p.27/69
Interfete comportamentale
ActionSource
ValueHolder
EditableValueHolder
StateHolder
NamingContainer
UICommand -> ActionSource, StateHolder
UIOutput -> StateHolder, ValueHolder
UIInput -> EditableValueHolder, StateHolder, ValueHolder
Tehnologii Java p.28/69
Modelul de prezentare
Dene ste nf ati sarea componentelor.
Un model pentru reprezentare este implementat prin
intermediul unui obiect de tip RendererKit si este
specic pentru un anumit tip de: dispozitiv / limbaj de
marcare / localizare
Un RendereKit reprezint a o multime de obiecte de
tip Renderer care ofer a o reprezentare specic a
componentelor UI.
Unei clase de tip UIComponent i pot asociate mai
multe reprezent ari (Strategy Design Pattern)
Tehnologii Java p.29/69
Reprezent ari multiple
Tehnologii Java p.30/69
HTML Renderer Kit
Implementarea JSF include un kit standard pentru
reprezentare HTML.
Componenta Reprezentare Tag
UICommand HtmlCommandButton commandButton
HtmlCommandLink commandLink
UISelectOne HtmlSelectOneMenu selectOneMenu
HtmlSelectOneRadio selectOneRadio
HtmlSelectOneListbox selectOneListbox
Tehnologii Java p.31/69
Modelul datelor: Backing Bean
Tehnologii Java p.32/69
Gestionarea bean-urilor
Datele unui componente JSF pot legate de un bean
aat pe server n dou a moduri:
prin valoare
<h:outputText value="#{persoana.nume}" />
prin referin t a
<h:outputText binding="#{persoana.numeField}" />
Tehnologii Java p.33/69
Legarea bean-urilor prin valoare
@ManagedBean(name = "personBean")
@RequestScoped
public class PersonBean {
private String name;
public PersonBean {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Propriet atile bean-ului accept a ca argument o valoare.
<h:inputText id="name" value="#{personBean.name}" />
Tehnologii Java p.34/69
Legarea bean-urilor prin referint a
...
public class PersonBean {
private UIInput nameComponent;
public UIInput getNameComponent() {
return nameComponent;
}
public void setNameComponent(UIInput nameComponent) {
this.nameComponent = nameComponent;
}
public void someMethod() {
nameComponent.setRendered(false);
}
}
Propriet atile bean-ului accept a ca argument o referin t a
de tipul componentei.
<h:inputText id="name" binding="#{personBean.nameComponent}"/>
Tehnologii Java p.35/69
Modelul de conversie
O component a UI poate avea asociate date, memorate
la nivel de server ntr-un bean.
Intr-o aplicatie JSF, datele unui componente sunt
organizate astfel:
model: informatia propriu-zis a, reprezentat a
printr-un tip Java de date, cum ar int, long,
String, java.util.Date, etc.
prezentare: reprezentarea la nivel de client, ntr-o
manier a care s a permit a citirea / editarea informatiei.
JSF va face automat conversia ntre model si prezentare,
si invers.
Tehnologii Java p.36/69
Convertori
Standard
UISelectBoolean: String Boolean
BigDecimalConverter, BigIntegerConverter
BooleanConverter, CharacterConverter,
DoubleConverter, IntegerConverter, LongConverter, etc.
DateTimeConverter
Proprii
Crearea si nregistrarea unor clase de tip Converter.
Tehnologii Java p.37/69
Conversii standard
Implicit, la corespondenta cu o proprietate de un
anumit tip a unui bean.
Explicit, folosind clasa corespunz atoare:
<h:inputText converter="javax.faces.convert.IntegerConverter"/>
Explicit, folosind taguri pentru conversii:
<h:outputText value="#{produse.dataExpediere}">
<f:convertDateTime dateStyle="full" locale="Locale.SPAIN"
timeStyle="long" type="both" />
</h:outputText>
<h:outputText value="#{produse.total}" >
<f:convertNumber type="currency"
</h:outputText>
Tehnologii Java p.38/69
Crearea de convertori proprii
String UIComponent
Implementarea interfetei Convertor
Inregistrarea convertorului n aplicatie
Utilizarea
Tehnologii Java p.39/69
Interfata Convertor
public class URLConverter implements Converter {
// Prezentare -> Model
public Object getAsObject(FacesContext context,
UIComponent component, String newValue) throws ConverterException
try {
return new URL(newValue);
} catch(Exception e) {
throw new ConverterException("Eroare la conversie!");
}
}
// Model -> Prezentare
public String getAsString(FacesContext context,
UIComponent component, Object value) throws ConverterException {
return String.valueOf(value);
}
}
Tehnologii Java p.40/69
Folosirea unui convertor propriu
Inregistrarea n faces-cong.xml
<converter>
<description>
Convertor pentru URL-uri.
Transforma un sir ce reprezinta o adresa Web
intr-un obiect de tip URL
</description>
<converter-id> urlConverter </converter-id>
<converter-class> demo.URLConverter </converter-class>
</converter>
Utilizarea
<h:inputText id="url"
value="resursa-url"
converter="urlConverter" />
Tehnologii Java p.41/69
Modelul Event - Listener
Interactiunea utilizatorului cu componente UI
genereaz a evenimente.
La aparitia unui eveniment, vor noticate metodele
claselor listener nregistrate pentru componenta
surs a a evenimentului.
Tipurile de evenimente si interfetele listener
corespunz atoare:
ActionEvent - ActionListener
ValueChangedEvent -
ValueChangedListener
PhaseEvent - PhaseListener
Tehnologii Java p.42/69
Inregistrarea unor obiecte listener
ActionListener
<h:commandLink id="adpers"
action="persoana.adauaga">
<f:actionListener type="logger.logAction" />
</h:commandLink>
ValueChangedListener
<h:inputText id="nume"
size="50"
value="#{persoana.nume}"
required="true"
valueChangeListener="persoana.numeSchimbat">
<f:valueChangeListener type="logger.logValueChange" />
</h:inputText>
Tehnologii Java p.43/69
Modelul pentru validare
JSF pemite validarea datelor la nivel de prezentare,
nainte de actualizarea modelului memorat pe server.
Validatorii pot
Standard
Referiti prin intermediul unor taguri de validare JSF,
incluse n corpul unui tag corespunz ator unei
componente UI.
Proprii
Validarea din cadrul unei componente bean
Implementarea interfetei Validator
Tehnologii Java p.44/69
Validatori standard
required
<h:inputText id="nume" size="50" value="#{persoana.nume}"
required="true"/>
validateLength
<h:inputText id="nick" size="10" value="#{persoana.nick}">
<f:validateLength minimum="1" maximum="10"/>
</h:inputText>
validateLongRange, validateDoubleRange
<h:inputText id="cantitate" size="4" value="#{articol.cantitate}">
<f:validateLongRange minimum="1"/>
</h:inputText>
Tehnologii Java p.45/69
Crearea unei metode de validare
public void validateEmail(FacesContext context,
UIComponent component, Object value) {
String email = (String) value;
if (email.indexOf(@) == -1) {
((UIInput)component).setValid(false);
String message = "Bad email..."
context.addMessage(component.getClientId(context),
new FacesMessage(message));
}
}
Utilizarea
<h:inputText id="email"
value="#{user.email}"
validator="#{user.validateEmail}"/>
Tehnologii Java p.46/69
Interfata Validator
public void validate(FacesContext context,
UIComponent component, Object value) {
if ((context == null) || (component == null)) {
throw new NullPointerException();
}
if (!(component instanceof UIInput)) {
return;
}
if (value == null) {
return;
}
boolean valid = ... ;
if (!valid ) {
throw new ValidatorException("Eroare");
}
}
Tehnologii Java p.47/69
Folosirea unui validator propriu
Inregistrarea - faces-cong.xml
<validator>
...
<validator-id>emailValidator</validator-id>
<validator-class>
demo.EmailValidator
</validator-class>
<attribute>
...
<attribute-name></attribute-name>
<attribute-class></attribute-class>
</attribute>
</validator>
Utilizarea
<h:inputText id="email" value="#{user.email}" >
<f:validator validatorId="emailValidator" />
</h:inputText>
Tehnologii Java p.48/69
Modelul pentru navigare
Navigarea reprezint a un set de reguli pentru selectarea
urm atoarei pagini ce va a sat a dup a executarea unei
anumite actiuni.
Evenimentele ActionEvent generate sunt preluate de
c atre un ActionListener implicit si transmise c atre
un obiect NavigatorHandler, responsabil cu controlul
navig arii. Acesta va determina urm atoarea pagin a
examinnd sierul faces-cong.xml.
<navigation-rule>
<from-view-id>/greeting.jsp</from-view-id>
<navigation-case> <from-outcome>success</from-outcome>
<to-view-id>/response.jsp</to-view-id>
</navigation-case>
</navigation-rule>
Tehnologii Java p.49/69
Reguli de navigare
Reguli generale
<navigation-rule>
<from-view-id> from-id1 </from-view-id>
<navigation-case> <from-outcome> outcome1 </from-outcome>
<to-view-id> to-id1 </to-view-id>
</navigation-case>
</navigation-rule>
Reguli implicite:
lipse ste outcome
k
, to id
k
este implicit
Sabloane: fromid poate /pages/
*
Rezolvarea regulilor multiple:
cea mai specic a regul a este aplicat a
Reguli "globale": fromid lipse ste sau este
*
Tehnologii Java p.50/69
Exemplu navigare
Tehnologii Java p.51/69
Ciclul de via t a
Tehnologii Java p.52/69
Ciclul de via t a
Tehnologii Java p.53/69
Crearea unui PhaseListener
public class PhaseLogger implements PhaseListener {
public PhaseLogger() {
System.out.println("PhaseLogger created.");
}
public void afterPhase(PhaseEvent event) {
System.out.println("AFTER - " + event.getPhaseId());
}
public void beforePhase(PhaseEvent event) {
System.out.println("BEFORE - " + event.getPhaseId());
}
public PhaseId getPhaseId() {
return PhaseId.ANY_PHASE;
}
}
<lifecycle>
<phase-listener>
myapp.listeners.PhaseLogger
</phase-listener>
</lifecycle>
Tehnologii Java p.54/69
Taguri proprii JSF
Tehnologii Java p.55/69
Biblioteci de taguri
JSF contine dou a biblioteci de taguri proprii:
html_basic - taguri pentru reprezentarea
componentelor HTML standard.
jsf_core - taguri independente de reprezentare, utile
pentru operatiuni de validare, conversie, etc.
JSP
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
Facelets
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
Tehnologii Java p.56/69
Taguri HTML
h:commandButton h:commandLink h:dataTable h:form
h:graphicImage h:inputHidden h:inputSecret h:inputText
h:inputTextarea h:message h:messages h:outputFormat
h:outputLabel h:outputLink h:outputText h:panelGrid
h:panelGroup h:selectBooleanCheckbox h:selectManyCheckbox
h:selectManyListbox h:selectManyMenu h:selectOneListbox
h:selectOneMenu h:selectOneRadio h:column, ...
Tehnologii Java p.57/69
Atribute comune
id - Identicatorul unic al componentei.
immediate - Forteaz a efectuarea valid arilor,
conversiilor, etc. n faza "Apply Request Values".
rendered - Specic a dac a va sau nu a sat a
componenta.
style, styleClass - Specic a un stil / clas a CSS.
value - Leag a componenta de o surs a extern a de
date.
binding - Leag a componenta de o component a
bean.
Tehnologii Java p.58/69
Taguri nucleu
f:actionListener f:attribute f:convertDateTime
f:convertNumber f:converter f:facet
f:loadBundle f:param f:selectItem
f:selectItems f:subview f:validateDoubleRange
f:validateLength f:validateLongRange f:validator
f:valueChangeListener f:verbatim f:view, ...
Tehnologii Java p.59/69
Localizarea
Specicarea unui sier cu resurse
<f:loadBundle var="bundle" basename="bundle.Messages" />
Identicarea unui mesaj pe baza cheii sale
<h:outputText value="#{bundle.Hello}"/>
/WEB-INF/classes/bundle/Messages.properties
Hello=Salutari calduroase
Tehnologii Java p.60/69
Facelets
Tehnologii Java p.61/69
Ce reprezint a Facelets ?
Limbaj pentru crearea declarativ a, orientat a pe
componente a paginilor de prezentare ale unei aplicatii
Web.
Caracteristici:
Utilizeaz a XHTML pentru crearea paginilor
Bazat pe taguri proprii: Facelets, JSF, JSTL
Accept a limbajul de expresii EL
Permite crearea de sabloane
Permite crearea de componente proprii
Tehnologii Java p.62/69
Crearea paginilor folosind
sabloane
Tehnologii Java p.63/69
Denirea unui sablon
template.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>Facelets Template</title>
</h:head>
<h:body>
<div id="top" class="top">
<ui:insert name="top">Top Section</ui:insert>
</div>
<div id="content" class="main">
<ui:insert name="content">Main Content</ui:insert>
</div>
<div id="bottom" class="bottom">
<ui:insert name="bottom">Bottom Section</ui:insert>
</div>
</h:body>
</html>
Tehnologii Java p.64/69
Crearea unei pagini
hello.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html">
<h:body>
<ui:composition template="./template.xhtml">
<ui:define name="top">
Welcome to Facelets
</ui:define>
<ui:define name="content">
<h:graphicImage value="#{resource[images:hello.jpg]}"/>
<h:outputText value="Hello Facelets!"/>
</ui:define>
<ui:define name="bottom">
<h:outputLabel value="Power to the Facelets"/>
</ui:define>
</ui:composition>
</h:body>
</html>
Tehnologii Java p.65/69
Resurse
JSF utilizeaza o serie de conventii in accesarea
resurselor
\aplicatie
...
\WEB-INF
\classes
\lib
\resources
\css
\javascript
\images
<h:graphicImage library="images" name="hello.jpg" />
<h:graphicImage value="#{resource[images:hello.jpg]}"/>
Tehnologii Java p.66/69
Crearea de componente proprii
Tehnologii Java p.67/69
Denirea componentei
resources/ezcomp/email.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>This content will not be displayed</title>
</h:head>
<h:body>
<composite:interface>
<composite:attribute name="value" required="false"/>
</composite:interface>
<composite:implementation>
<h:outputLabel value="Email id: "></h:outputLabel>
<h:inputText value="#{cc.attrs.value}"></h:inputText>
</composite:implementation>
</h:body>
</html>
Tehnologii Java p.68/69
Utilizarea componentei
somePage.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ez="http://java.sun.com/jsf/composite/ezcomp/">
<h:head>
<title>Using a sample composite component</title>
</h:head>
<body>
<h:form>
<ez:email value="Enter your email id" />
</h:form>
</body>
</html>
Tehnologii Java p.69/69

S-ar putea să vă placă și