Title: J2EE
1Internetteknologi 2 (ITNET2)
- J2EE
- JavaServer Faces (JSF)
- Introduction
2Agenda
- JavaServer Faces (JSF)
- Motivation for JSF
- Visual Tool Support
- JSF Legacy Elements
- Events
- Managed Beans
- Tool support
3Motivation
- ASP.NET 2 VS 2003/2005
- New approach to Web development
- JSP/Servlet specification could not compete
- JSF introduced to supplement JSP/Servlet
- JSF is a Sun Java specification
- Implementations from Sun, IBM, Oracle, Exadel
- A UI framework for Java Web applications
- Easy component-based UI development
- Swing like event model
- Code behind like approach
- Designed for visual tool support
4Visual Tool Support from IBM WSAD, Netbeans 5.5,
JDeveloper 11g
5JSF Legacy
- JSF uses JSP, EL, JSTL, Servlet technologies
- It does NOT replace JSP/Servlet technology
- Introduces backing beans and event programming
- NOT a must
- JSF works with JDBC, JPA, POJO, EJB, WS
- JSF supports FrontController pattern out of the
box - STRUTS heritage
- Good news all we know may still be applied
6Elements of JSF
- FacesServlet (central processing unit)
- Web.xml (well-known from JSP/Servlet J2EE)
- Faces-config.xml (configures navigation and
managed beans etc.) - JSF-pages / JSF-tags (view implementations)
- Managed Beans (beans controlled by framework)
- Backing beans (event handler code)
- Navigation Rules (front controller pattern)
- Validators (same as .NET)
- Converters (same as .NET)
7Faces Servlet
- Required FrontController
- Implemented by the framework not developers
- All JSF request must pass through this
- Configured via web.xml
- Reads faces-config.xml for navigation and managed
beans
ltservletgt ltservlet-namegtFaces
Servletlt/servlet-namegt ltservlet-classgtjavax.fa
ces.webapp.FacesServletlt/servlet-classgt
ltload-on-startupgt 1 lt/load-on-startupgt lt/servletgt
Page navigation is NOT required to use
frontController
8Faces-config.xml
- Configures navigation, managed beans etc.
- May be split up into several implementations
- Managed-beans.xml
- Navigation.xml
- And other files
- Depending on the tool
9Managed-beans.xml
lt?xml version"1.0" encoding"UTF-8"?gt lt!DOCTYPE
faces-config PUBLIC "-//Sun Microsystems,
Inc.//DTD JavaServer Faces Config 1.1//EN"
"http//java.sun.com/dtd/we
b-facesconfig_1_1.dtd"gt ltfaces-configgt
ltmanaged-beangt ltmanaged-bean-namegtSessionB
ean1lt/managed-bean-namegt
ltmanaged-bean-classgtvisualebtest.SessionBean1lt/man
aged-bean-classgt ltmanaged-bean-scopegtsessi
onlt/managed-bean-scopegt lt/managed-beangt
ltmanaged-beangt ltmanaged-bean-namegtPage1lt/m
anaged-bean-namegt ltmanaged-bean-classgtvisu
alebtest.Page1lt/managed-bean-classgt
ltmanaged-bean-scopegtrequestlt/managed-bean-scopegt
lt/managed-beangt ltmanaged-beangt
ltmanaged-bean-namegtApplicationBean1lt/managed-bean-
namegt ltmanaged-bean-classgtvisualebtest.App
licationBean1lt/managed-bean-classgt
ltmanaged-bean-scopegtapplicationlt/managed-bean-scop
egt lt/managed-beangt ltmanaged-beangt
ltmanaged-bean-namegtRequestBean1lt/managed-bean-name
gt ltmanaged-bean-classgtvisualebtest.Request
Bean1lt/managed-bean-classgt
ltmanaged-bean-scopegtrequestlt/managed-bean-scopegt
lt/managed-beangt lt/faces-configgt
Backing bean Of Page1.JSF
Managaed Beans are accessible in all JSF pages
via EL Page1.submit
10Navigation.xml
lt?xml version"1.0" encoding"UTF-8"?gt lt!DOCTYPE
faces-config PUBLIC "-//Sun Microsystems,
Inc.//DTD JavaServer Faces Config 1.1//EN"
"http//java.sun.com/dtd/web-facesconfig_1_1.dtd"gt
ltfaces-configgt ltnavigation-rulegt
ltfrom-view-idgt/Page1.jsplt/from-view-idgt
ltnavigation-casegt ltfrom-outcomegtcase1lt
/from-outcomegt ltto-view-idgt/Page2.jsplt
/to-view-idgt lt/navigation-casegt
lt/navigation-rulegt lt/faces-configgt
FrontController pattern implemented by defining a
number of cases (actions) which e.g. a button
press Might react to and where to navigate
to Counters anti-pattern spaghetti
11JSF Pages / Taglibs
- Open to many different technologies
- In practice JSP integration
- JSF Views are JSP pages using JSF tags
- XML Style
- Like ASP.NET 2, UI components are represented as
different elements e.g. lthdataTable /gt - Like ASP.NET you may make your own components
12JSF taglibs
Binding to backing bean
Table component
Navigation link
A JSP page with JSF components Created with
Visual Designer
13Backing Beans
- Abstracting event handling and data model away
from JSF pages - Somewhat like code behind in ASP.NET
- Event Oriented
- Actions
- ActionListeners
14Event Handling
- Actions may change page using return
- return null for post back
- return case1 frontcontroller -gt Page2.jsf
- Checks faces-config.xml or navigation.xml
- ActionListeners occur before Actions and no page
change
Java Backing Bean Action Event Handler (ASP.NET
Click)
JSF binding to action
15Managed Beans
- Managed Beans are JavaBeans
- JavaBeans must be reflectable
- (getter,setter, no-arg constructor)
- A Managed Bean is a Value Object pattern
- Holding scoped state for the Web application
- Application, Session, Request, Page1, User
- Like ltjspuseBean /gt in JSP
- Backing Beans are Managed Beans
- May be accessed from anywhere in Web application
- JSF using EL Page1.button1
- Java Page1 page (Page1) this.getPage1()
- page.button1.setToolTip("Press for fun")
16Databinding
- A frequent task is RDBMS access
- JSF has widespread support for this
- May be done
- Manual JDBC coding (see JSP slides for example)
- RowSet (com.sun.sql.rowset.CachedRowSetXImpl)
- Entity Beans (JPA, TopLink, Hibernate, EJB
2.1/3.0) - Next we examplify the latter two with Netbeans
5.5 tool support - Drag-n-drop and Wizard
17RowSet (the qucik-n-dirty approach)
- Most J2EE IDE tools have a Runtime tab with
database acces - Select database table and drag to designer
- Creates a member in Session managed bean
18Binding Table to Rowset
19JSF Resulting Tags
- A uiTable element is added with colums
- EL is used to bind the data sources
20Binding to City Drop-Down with City Table
21Alternative Entity Classes
- RowSet approach OK for small solutions
- Not good in case of business logic code
- Instead use Entity classes
- A) Wizard Generate Entity Classes
- B) Wizard Generate JSF pages from Entity
- A) provides a domain layer (model layer)
- B) will provide a control / view layer
22Entity Classes from Database
You may use this layer for Other technologies as
well Including Web services, CORBA, Java RMI,
Swing, etc.
23Model Generated
- Access using JPA write own DAO layer
24JSF Pages from Entities
- Will created View and Control / BL layers as well
Entity Manager Controls the DB Access including
transactions
25Persistence.xml
- Gets generated by tool but can write yourself
26JSF Pages Generated
27Result
For now JSF pages wizard does NOT work With
Visual Designer applications
28Architectural Considerations from JSF
- FrontController is directly supported use it
- Event based programming -gt look out for layer
separation (do not write business logic layer
code in the event handlers of the backing bean) - Like ASP.NET Database drag-n-drop is supported
with table / component data binding - Watch out for this approach, use only for small
systems with little or no business code - Alternative generate Entity classes (EJB, JPA)
and event JSF code
29Stefans Considerations on JSF
- JSF is a strong alternative to ASP.NET but much
to learn - RowSet approach (quick-n-dirty) almost as easy as
Visual Studio - Entity (EE) approach much better than ASP.NET
- FrontController pattern / navigation.xml is a
very strong feature compared to master-details - JSF wins over ASP.NET for very large projects
- ASP.NET / VS 2005 more productive for RAD
development of small to medium sized projects - NetBeans requires tons of RAM but runs
extremely well on 2 GB Dual Core machine -) Nice
to be rich - But its FREE and runs on Solaris / Linux /
Windows - Trying to develop JSF without tool support is
doomed to fail!
30Advice for Assignment 1
- Consider NOT using JSF (as stated earlier)
- Use JSP/Servlets as you will learn much about
server programming from this - Try implementing a few pages also in JSF
- But beware of NetBeans not working properly on
IHA Lab machines