JSF 2 ui component

JSF 2 ui component


Posted in : Java Posted on : October 5, 2012 at 7:22 PM Comments : [ 0 ]

In this section we will learned about the JSF 2 ui component tag.

JSF 2 ui component

In this section we will learned about the JSF 2 ui component tag.

<ui:component> tag of JSF 2 ui tag library is used to specify a component. This tag is alike the ui:composition but using this tag you can't associate templates. Use of this tag creates a component which is added directly to the tree.

Attributes of JSF 2 ui component

  • id : This is an optional attribute. This attribute is used to make the component uniquely identifiable. If the value of this attribute is not provided by the user then a value (based on the algorithm) will be assigned by the JSF.
  • binding : This is an optional attribute. This attribute is used to bind a backing bean property with the component.

Example :

An example is given below which demonstrates about the use of ui:component tag. In this example I am trying to show you to how to use this tag in the JSF applications. In this example you will see the use of both ui:composition and ui:component tag that explains the difference between these two tags. In this example I have created the two templates header and footer pages which are XHTML pages. Then created a facelets where included the header, footer parts and as well as specify the space for the contents to be written. Then created the using pages where we will use these pre created XHTML pages. In the first page i.e. on input.xhtml page I have used the ui:composition tag and in the other page i.e. on output.xhtml page I have used the ui:component tag. In both of the pages you will see the contents written outside these tags will be ignored and using the composition tag you can associate header and footer templates but not with the component.

Directory Structure

NameBean.java

package devmanuals;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean(name="nameBean")
@RequestScoped
public class NameBean {

String name;
String email;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}
}

header.xhtml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head> 
</h:head>
<f:view>
<h:body>
<h:outputStylesheet library="css" name="myCSS.css" target="head" />
<h:panelGrid columns="1" styleClass="t1">
<h:graphicImage value="/images/FaceletsHeader.jpg" />
<h:dataTable value="" title="ui:composition tag example">
<h:column>
<h:outputLink value="#home">
<h:outputText value="Home" />
</h:outputLink>
</h:column>

<h:column>
<h:outputLink value="#about">
<h:outputText value="About Us" />
</h:outputLink>
</h:column>

<h:column>
<h:outputLink value="#advertise">
<h:outputText value="Advertise" />
</h:outputLink>
</h:column>

</h:dataTable>
</h:panelGrid>

</h:body>
</f:view>
</html>

footer.xhtml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head> 
</h:head>
<f:view>
<h:body>
<h:outputStylesheet library="css" name="myCSS.css" target="head" />
<h:panelGrid columns="1" styleClass="t1">
<h:dataTable value="" title="ui:composition tag example">
<h:column>
<h:outputLink value="#home">
<h:outputText value="Home" />
</h:outputLink>
</h:column>

<h:column>
<h:outputLink value="#about">
<h:outputText value="About Us" />
</h:outputLink>
</h:column>

<h:column>
<h:outputLink value="#privacy">
<h:outputText value="Privacy Policy" />
</h:outputLink>
</h:column> 
</h:dataTable>
<h:panelGroup>
<h:graphicImage value="/images/FaceletsFooter.jpg" />
</h:panelGroup>
</h:panelGrid>
</h:body>
</f:view>
</html>

BasicTemplate.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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><ui:insert name="title">JSF Facelets</ui:insert></title>
</h:head>
<body>
<div id="header">
<ui:insert name="header">
<ui:include src="/WEB-INF/templates/header.xhtml" />
</ui:insert>
</div>
<div id="content">
<ui:insert name="content">

<!-- here you can include your content file like the below --> 
<!-- <div> -->
<!-- <ui:include src="contentFileName.xhtml"/> -->
<!-- </div> -->
<!-- or in the using pages wherever this template will be called you will have to -->
<!-- write your content inside the <ui:composition><ui:define> -->
<!-- </ui:define></ui:composition> tag to show your content-->
</ui:insert>
</div>
<div id="footer">
<ui:insert name="footer">
<ui:include src="/WEB-INF/templates/footer.xhtml" />
</ui:insert>
</div>
</body>
</html>

myCSS.css

@CHARSET "ISO-8859-1";
<style type="text/css">
table.t1
{
width=0px;
border=0px;
}
table.t1 td
{ 
margin:0;
padding:0;
overflow:hidden;
text-align:center; 
}
a
{
color:#ffffff;
display:block;
width:181px;
background-color:#2f1e2b;
}
</style>

input.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h3>Text outside the ui:composition will be ignored.</h3>
<ui:composition template="/WEB-INF/templates/BasicTemplate.xhtml">
<ui:define name="content"> 
<h:form>
<h3>Enquiry Form</h3>
<table>
<tr>
<td><h:outputText value="Enter Your Name : " /></td>
<td><h:inputText id="nameFiled" value="#{nameBean.name}"
required="true" requiredMessage="value is required"/></td>
<td><h:message for="nameFiled" style="color:red" /></td>
</tr>
<tr>
<td><h:outputText value="Enter Your e-mail : "/></td>
<td><h:inputText id="email" value="#{nameBean.email}"
required="true" requiredMessage="value is required"/></td>
<td><h:message for="email" style="color:red" /></td>
</tr>
<tr>
<td></td>
<td><h:commandButton value="Submit" action="output"/></td>
</tr>
</table>
</h:form>
</ui:define>
</ui:composition>
<p>Text outside the ui:composition will be ignored.</p>
</html>

output.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">

<h3>Text outside the ui:component will be ignored.</h3>
<ui:component>
<div>
<table>
<tr>
<td><h:outputText value="Your Name is :"/></td>
<td><h:outputText value="#{nameBean.name}"/></td>
</tr>
<tr>
<td><h:outputText value="Your email id is :" /></td>
<td><h:outputText value="#{nameBean.email}"/></td>
</tr> 
</table>
<p><b>Thank You for visiting. We will shortly contact to you.</b></p> 
</div>
</ui:component>
<p>Text outside the ui:component will be ignored.</p>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>jsfUIComponent</display-name>
<welcome-file-list>
<welcome-file>/UsingPages/input.xhtml</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
<url-pattern>*.jsf</url-pattern>
<url-pattern>*.xhtml</url-pattern>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<context-param>
<description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>resources.application</param-value>
</context-param>
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
</web-app>

How To execute this example

To execute this example you can download a WAR file example form here and import this war file into your eclipse by File -> import -> web -> war file and simply execute this example by selecting the imported project as follows :- Select your project -> Right Click -> Run As -> Run On Server.

Output :

When this example will be executed successfully then the output will be as follows :

1. The main page will be look like as follows :

2. Output of without filling up the textboxes clicked on submit button.

3. When you will filed the textboxes and submitted the form then the output will be as follows :

Go to Topic «PreviousHomeNext»

Your Comment:


Your Name (*) :
Your Email :
Subject (*):
Your Comment (*):
  Reload Image
 
 

 
Tutorial Topics