Q: What is
JavaServer Faces?
A: JavaServer Faces (JSF) is a user interface
(UI) framework for Java web applications. It
is designed to significantly ease the burden
of writing and maintaining applications that
run on a Java application server and render
their UIs back to a target client. JSF provides
ease-of-use in the following ways:
• Makes it easy to construct a UI from
a set of reusable UI components
• Simplifies migration of application
data to and from the UI
• Helps manage UI state across server
requests
• Provides a simple model for wiring client-generated
events to server-side application code
• Allows custom UI components to be easily
built and re-used
Most importantly, JSF establishes standards
which are designed to be leveraged by tools
to provide a developer experience which is accessible
to a wide variety of developer types, ranging
from corporate developers to systems programmers.
A "corporate developer" is characterized
as an individual who is proficient in writing
procedural code and business logic, but is not
necessarily skilled in object-oriented programming.
A "systems programmer" understands
object-oriented fundamentals, including abstraction
and designing for re-use. A corporate developer
typically relies on tools for development, while
a system programmer may define his or her tool
as a text editor for writing code. Therefore,
JSF is designed to be tooled, but also exposes
the framework and programming model as APIs
so that it can be used outside of tools, as
is sometimes required by systems programmers.
Q: How to pass a parameter to the JSF
application using the URL string?
A: if you have the following URL: http://your_server/your_app/product.jsf?id=777,
you access the passing parameter id with the
following lines of java code:
FacesContext fc = FacesContext.getCurrentInstance();
String id = (String) fc.getExternalContext().getRequestParameterMap().get("id");
From the page, you can access the same parameter
using the predefined variable with name param.
For example,
<h:outputText value="#{param['id']}"
/>
Note: You have to call the jsf page directly
and using the servlet mapping.
Q: How to add context path to URL for
outputLink?
A: Current JSF implementation does not add the
context path for outputLink if the defined path
starts with '/'. To correct this problem use
#{facesContext.externalContext.requestContextPath}
prefix at the beginning of the outputLink value
attribute. For example:
<h:outputLink value="#{facesContext.externalContext.requestContextPath}/myPage.faces">
Q: How to get
current page URL from backing bean?
A: You can get a reference to the HTTP request
object via FacesContext like this:
FacesContext fc = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest)
fc.getExternalContext().getRequest();
and then use the normal request methods to obtain
path information. Alternatively,
context.getViewRoot().getViewId();
will return you the name of the current JSP
(JSF view IDs are basically just JSP path names).
Q: How to access web.xml init parameters
from java code?
You can get it using externalContext getInitParameter
method. For example, if you have:
<context-param>
<param-name>connectionString</param-name>
<param-value>jdbc:oracle:thin:scott/tiger@cartman:1521:O901DB</param-value>
</context-param>
You can access this connection string with:
FacesContext
fc = FacesContext.getCurrentInstance();
String connection = fc.getExternalContext().getInitParameter("connectionString");
Q: How to access web.xml init parameters
from jsp page?
You can get it using initParam pre-defined JSF
EL valiable.
For example, if you have:
<context-param>
<param-name>productId</param-name>
<param-value>2004Q4</param-value>
</context-param>
You can access this parameter with #{initParam['productId']}
. For example:
Product Id: <h:outputText value="#{initParam['productId']}"/>