JSF

Question   What is JSF?
Answer   JSF stands for Java Server Faces. JSF has set of pre-assembled User Interface (UI). By this it means complex components are pre-coded and can be used with ease. It is event-driven programming model. By that it means that JSF has all necessary code for event handling and component organization. Application programmers can concentrate on application logic rather sending effort on these issues. It has component model that enables third-party components to be added like AJAX.
   
Question   What is required for JSF to get started?
Answer   Following things required for JSF:
ΓÇó JDK (Java SE Development Kit)
ΓÇó JSF 1.2
ΓÇó Application Server (Tomcat or any standard application server)
ΓÇó Integrated Development Environment (IDE) Ex. Netbeans 5.5, Eclipse 3.2.x, etc.
Once JDK and Application Server is downloaded and configured, one can copy the JSF jar files to JSF project and could just start coding. :-)
If IDE is used, it will make things very smooth and will save your time.
 
Question What is JSF architecture?
Answer   JSF was developed using MVC (a.k.a Model View Controller) design pattern so that
applications can be scaled better with greater maintainability. It is driven by Java
Community Process (JCP) and has become a standard. The advantage of JSF is that it’s both a Java Web user – interface and a framework that fits well with the MVC. It provides clean separation between presentation and behavior. UI (a.k.a User Interface) can be created by page author using reusable UI components and business logic part can be implemented using managed beans.
   
Question   How JSF different from conventional JSP / Servlet Model?
Answer   JSF much more plumbing that JSP developers have to implement by hand, such as page navigation and validation. One can think of JSP and servlets as the â€oeassembly languageâ€? under the hood of the high-level JSF framework.
   
Question   How the components of JSF are rendered? An Example
Answer   In an application add the JSF libraries. Further in the .jsp page one has to add the tag library like:
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
Or one can try XML style as well:

Once this is done, one can access the JSF components using the prefix attached. If working with an IDE (a.k.a Integrated Development Environment) one can easily add JSF but when working without them one also has to update/make the faces-config.xml and have to populate the file with classes i.e. Managed Beans between
tags

   
Question   How to declare the Navigation Rules for JSF?
Answer   Navigation rules tells JSF implementation which page to send back to the browser after a form has been submitted. For ex. for a login page, after the login gets successful, it should go to Main page, else to return on the same login page, for that we have to code as:

/login.jsp

login
/main.jsp
fail
/login.jsp

from-outcome to be match with action attribute of the command button of the login.jsp as:


Secondly, it should also match with the navigation rule in face-config.xml as

user
core.jsf.LoginBean
session

In the UI component, to be declared / used as:

value attribute refers to name property of the user bean.

   
Question   How do I configure the configuration file?
Answer   The configuration file used is our old web.xml, if we use some IDE it will be pretty simple to generate but the contents will be something like below:


com.sun.faces.verifyObjects false

com.sun.faces.validateXml true

javax.faces.STATE_SAVING_METHOD client


Faces Servlet
javax.faces.webapp.FacesServlet
1


Faces Servlet
/faces/*



30




index.jsp


The unique thing about this file is ?servlet mapping?. JSF pages are processed by a servlet known to be part of JSF implementation code. In the example above, it has extension of .faces. It would be wrong to point your browser to http://localhost:8080/MyJSF/login.jsp, but it has to be http://localhost:8080/MyJSF/login.faces. If you want that your pages to be
with .jsf, it can be done with small modification :-),


Faces Servlet
*.jsf

   
Question   What is JSF framework?
Answer   JSF framework can be explained with the following diagram:
As can be seen in Figure 1, JSF interacts with Client Devices which ties together with
presentation, navigation and event handling and business logic of web tier model. Hence JSF is limited to presentation logic / tier. For Database tier i.e. Database and Web services one has to rely on other services.
   
Question   How does JSF depict the MVC (a.k.a Model View Controller) model?
Answer   The data that is manipulated in form or the other is done by model. The data presented to user in one form or the other is done by view. JSF is connects the view and the model. View can be depicted as shown by:


JSF acts as controller by way of action processing done by the user or triggering of an
event. For ex.

, this button event will triggered by the user on Button press, which will invoke the login Bean as stated in the faces-config.xml file. Hence, it could be summarized as below: User Button Click -> form submission to server -> invocation of Bean class -> result thrown by Bean class caught be navigation rule -> navigation rule based on action directs to specific page.

   
Question   What does it mean by rendering of page in JSF?
Answer   Every JSF page as described has various components made with the help of JSF library. JSF may contain h:form, h:inputText, h:commandButton, etc. Each of these are rendered (translated) to HTML output. This process is called encoding. The encoding procedure also assigns each component with a unique ID assigned by framework. The ID generated is random.
   
Question   What is JavaServer Faces?
Answer   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-ofuse 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.

   
Question   How to pass a parameter to the JSF application using the URL string?
Answer   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,


Note: You have to call the jsf page directly and using the servlet mapping.

   
Question   How to add context path to URL for outputLink?
Answer   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:
   
Question   How to get current page URL from backing bean?
Answer   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).
   
Question   How to access web.xml init parameters from java code?
Answer   You can get it using externalContext getInitParameter method. For example, if you have:

connectionString jdbc:oracle:thin:scott/tiger@cartman:1521:O901DB

You can access this connection string with:
FacesContext fc = FacesContext.getCurrentInstance();
String connection = fc.getExternalContext().getInitParameter(“connectionString”);
   
Question   How to access web.xml init parameters from jsp page?
Answer   You can get it using initParam pre-defined JSF EL valiable.
For example, if you have:

productId 2004Q4

You can access this parameter with #{initParam[‘productId’]} . For example:
Product Id:
   
Question   How to terminate the session?
Answer   In order to terminate the session you can use session invalidate method.
This is an example how to terminate the session from the action method of a backing bean:
public String logout() {
FacesContext fc = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) fc.getExternalContext().getSession(false);
session.invalidate();
return “login_page”;
}
The following code snippet allows to terminate the session from the jsp page:
<% session.invalidate(); %>
   
Question   How to reload the page after ValueChangeListener is invoked?
Answer   At the end of the ValueChangeListener, call FacesContext.getCurrentInstance().renderResponse()
   
Question   How to download PDF file with JSF?
Answer   This is an code example how it can be done with action listener of the backing bean.
Add the following method to the backing bean:

public void viewPdf(ActionEvent event) {
String filename = “filename.pdf”;
// use your own method that reads file to the byte array
byte[] pdf = getTheContentOfTheFile(filename);
FacesContext faces = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) faces.getExternalContext().response.setContentType(“application/pdf”);
response.setContentLength(pdf.length);
response.setHeader( “Content-disposition”, “inline; filename=\””+fileName+”\””);
try {
ServletOutputStream out;
out = response.getOutputStream();
out.write(pdf);
} catch (IOException e) {
e.printStackTrace();
}
faces.responseComplete();
}
This is a jsp file snippet:
 

 
Question   How to show Confirmation Dialog when user Click the Command Link?
Answer   h:commandLink assign the onclick attribute for internal use. So, you cannot use it to write your own code. This problem will fixed in the JSF 1.2. For the current JSF version you can use onmousedown event that occurs before onclick.

. . . .

   
Question   What is the different between getRequestParameterMap() and getRequestParameterValuesMap()

Answer   getRequestParameterValuesMap() similar to getRequestParameterMap(), but contains multiple values for for the parameters with the same name. It is important if you one of the components such as .
   
Question   Is it possible to have more than one Faces Configuration file?
Answer   Yes. You can define the list of the configuration files in the web.xml.
This is an example:

javax.faces.CONFIG_FILES /WEB-INF/faces-config-navigation.xml,/WEB-INF/faces-beans.xml

Note: Do not register /WEB-INF/faces-config.xml file in the web.xml . Otherwise, the JSF implementation will process it twice.

Hi there, I guess the Note: column should have been meant or intended for “facesconfig.xml” file as thats the default configuration file for JSF (which is similar to strutsconfig.xml for Struts!!). faces-context.xml file sounds like the user defined config file similar to the aforementioned two xml files.

   
Question   How to print out html markup with h:outputText?
Answer   The h:outputText has attribute escape that allows to escape the html markup. By default, it equals to “true”. It means all the special symbols will be replaced with ‘&’ codes. If you set it to “false”, the text will be printed out without ecsaping.

For example,  

 
Question   h:inputSecret field becomes empty when page is reloaded. How to fix this?
Answer   Set redisplay=true, it is false by default.
   

One Response

Leave a Reply