TOTD #94: A simple Java Server Faces 2.0 + JPA 2.0 application - Getting Started with Java EE 6 using NetBeans 6.8 M1 & GlassFish v3
TOTD
#93
showed how to get started with Java EE 6
using NetBeans
6.8 M1 and
GlassFish v3 by
building a simple Servlet 3.0 + JPA 2.0 web
application. JPA 2.0 + Eclipselink was used for the database
connectivity
and Servlet 3.0 was used for displaying the results to the user. The
sample demonstrated how the two technologies can be mixed to create a
simple web application. But Servlets are meant for server-side
processing rather than displaying the results to end user. JavaServer
Faces 2 (another new specification in Java EE 6) is designed
to fulfill
that purpose.
This Tip
Of The Day (TOTD) shows how
to enhance the application created in TOTD #93 and use JSF 2 for
displaying the results.
- Right-click on the project, select "Properties", select
"Frameworks", click on "Add ..." as shown below:

Select "JavaServer Faces" and click on "OK". The following
configuration screen is shown:

Click on "OK" to complete the dialog. This generates a whole bunch of
files (7 to be accurate) in your project. Most of these files are
leftover from previous version of NetBeans and will be cleaned up. For
example, "faces-config.xml" is now optional and "forwardToJSF.jsp" is
redundant.
- Anyway, lets add a POJO class that will be our managed bean.
Right-click on "server" package and select "New", "Java Class ...",
give the name as "StateList". Change the class such that it looks like:
package server;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
import states.States;
/**
* @author arungupta
*/
@ManagedBean
public class StateList {
@PersistenceUnit
EntityManagerFactory emf;
public List<States>
getStates() {
return
emf.createEntityManager().createNamedQuery("States.findAll").getResultList();
}
} |
Here are the main characterisitcs of this class:
- This is a POJO class with @ManagedBean annotation. This
annotation makes this class a managed
bean that can be used in the JSF pages. As no other
annotations or parameters are specified, this is a request-scoped
managed bean with the name "stateList" and lazily initialized. More
details about this annotation are available in the javadocs.
- The persistence unit created in TOTD
#93 is injected using @PersistenceUnit annotation.
- The POJO has one getter method that queries the database
and return the list of all the states.
- In the generated file "template-client.xhtml", change the
"head" template to:
and "body" template to:
<h:dataTable var="state" value="#{stateList.states}"
border="1">
<h:column><h:outputText
value="#{state.abbrev}"/></h:column>
<h:column><h:outputText
value="#{state.name}"/></h:column>
</h:dataTable>
|
This uses the standard JSF "dataTable", "column", and "outputText" tags
and uses the value
expression to fetch the values from the managed bean.
If the application is already running from
TOTD
#93, then
Deploy-on-Save
would have automatically deployed the entire application. Otherwise
right-click on the project and select Run (default shortcut "F6"). The
results can be seen at
"http://localhost:8080/HelloEclipseLink/forwardToJSF.jsp" or
"http://localhost:8080/HelloEclipseLink/faces/template-client.xhtml"
and looks like:
The updated directory structure looks like:
There were multiple files added by the JSF framework support in
NetBeans. But as I said earlier, they will be cleaned up before the
final release.
Also refer to other
Java EE 6
blog entries.
Please leave suggestions on other TOTD that
you'd like to see.
A complete archive of all the tips is available
here.
Technorati: totd
glassfish
v3 mysql javaee6 javaserverfaces
jpa2 netbeans
Posted
by Arun Gupta in General |

|

|

|

|

|

|
|
Hi Arun,
yes, JSF 2 and JPA are great. But if you are going to save something, you will have to flush the cache and commit the transaction. Then a EJB 3.1 as a facade might be the simplest possible solution: http://www.adam-bien.com/roller/abien/entry/simplest_possible_jsf_2_ejb
Btw. sometimes it is even required to read in a transaction...
Great post!,
adam
Posted by Adam Bien on August 14, 2009 at 05:12 AM PDT #
Thanks Adam!
Seems like you already covered my next post because this is exactly what I was planning to blog :)
This post covers read-only data and so EJB was not essential and I'm building the complete sample nice and easy.
Posted by Arun Gupta on August 14, 2009 at 05:37 AM PDT #
Posted by Arun Gupta's Blog on August 17, 2009 at 08:36 AM PDT #