Java Server Faces JSF Training PPT - IonIdea

60
JavaServer Faces A new face on application development in Java

description

Training material by www.ionIdea.com on technical skills for public consumption. Tags - Java J2EE JSF RichFaces MyFaces DojoFaces ICEfaces etc

Transcript of Java Server Faces JSF Training PPT - IonIdea

Page 1: Java Server Faces JSF Training PPT - IonIdea

JavaServer Faces

A new face on application development in Java

Page 2: Java Server Faces JSF Training PPT - IonIdea

• What is JSF?– It is a web development open source framework.

• Why JSF is Required?– To build a Event based application and also to

reduce development time of application.• How does it Works?– It works majorly on the MVC design principle. – Uses the EL as well as Events

Page 3: Java Server Faces JSF Training PPT - IonIdea

What is JSF?

• JSF is an open standard: JSR 127• Java Community Process Website:

www.jcp.org• JSF is included in Java EE (formerly known is

J2EE)

Page 4: Java Server Faces JSF Training PPT - IonIdea

Why JSF is Required?

JSF is a new and upcoming web application framework that accomplishes the MVC paradigm It is similar to Struts but has features and concepts that are beyond those of Struts - especially the component orientation.

Provides set of reusable custom components. Provides set of JSP tags to access those components. Event driven model Eliminate a great deal of hand coding Make is easy for non-J2EE programmers

Page 5: Java Server Faces JSF Training PPT - IonIdea

How does JSF works?

JSF follows MVC framework Model: objects and properties of application View: Renderers take care of view. Controller: Faces Servlet/ JSF infrastructure

defines the flow of the application.

Page 6: Java Server Faces JSF Training PPT - IonIdea

Comparison between JSF and Struts

Struts JSF

Page 7: Java Server Faces JSF Training PPT - IonIdea

High level overview of JSF

Page 8: Java Server Faces JSF Training PPT - IonIdea

8

Login page

Page 9: Java Server Faces JSF Training PPT - IonIdea

9

Welcome page

Page 10: Java Server Faces JSF Training PPT - IonIdea

10

Example files

index.jsp,welcome.jsp – define the login and welcome screens.

UserBean.java – manages user datafaces-config.xml – configuration file for the application.web.xml – deployment descriptor.

Page 11: Java Server Faces JSF Training PPT - IonIdea

11

JSF Example(index.jsp)<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %><%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %><f:loadBundle basename=“com.corejsf.bundle.Messages" var="Message"/><f:view>… <h:form> <h3><h:outputText value="#{Message.inputname_header}"/></h3> <table> <tr> <td>Name:</td> <h:inputText value="#{user.name}“ required=“true”/> <f:validateLength minimum="2" maximum="20"/> … <td>Password:</td> <h:inputSecret value="#{user.password}"/> … <h:commandButton value="Login" action="login"/> </h:form></f:view>

Page 12: Java Server Faces JSF Training PPT - IonIdea

12

index.jsp • Tag Libraries: core and html.<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %><%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

• Core tags are used to perform core actions and display nothing to the user. Html tags are used to render html elements(text, form elements etc) to the user.

• <f:loadBundle> is a core tag. Loads properties file and makes it value available to variable message.

<f:loadBundle basename=“com.corejsf..bundle.Messages" var="Message"/>

• All JSF components must be nested inside <f:view> core tag.<f:view> <h:form> <h3><h:outputText value="#{Message.inputname_header}"/></h3> <h:inputText value="#{user.name}“ required=“true”/> <f:validateLength minimum="2" maximum="20"/> <h:inputSecret value="#{user.password}"/> <h:commandButton value="Login" action="login"/> </h:form></f:view>

Page 13: Java Server Faces JSF Training PPT - IonIdea

13

Example (Cntd.)• Any attribute value that starts with # and is wrapped in {} is dynamically

substituted in#{Message.inputname_header}

• <h:form> represents form element• Form action is defined in the <h:commandButton> element. <h:commandButton value="Login" action="login"/>

• <h:inputText> for name field renders a textbox. Required attribute tells the value must be provided by the user. Thus validating the field.

<h:inputText value="#{user.userName}" required="true">

• Nested core tag provides range validation.<f:validateLength minimum="2" maximum="20"/>

Page 14: Java Server Faces JSF Training PPT - IonIdea

14

UserBean.java

public class UserBean {…….. public String login(){ ….. return “login”;}public String getName() { . . . }public void setName(String newValue) {. . . }public String getPassword() { . . . }public void setPassword(String newValue) { . . . }. . .}

Page 15: Java Server Faces JSF Training PPT - IonIdea

15

Configuration file (faces-config.xml)

<?xml version="1.0"?>

<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN" "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">

<faces-config> <navigation-rule> <from-view-id>/index.jsp</from-view-id> <navigation-case> <from-outcome>login</from-outcome> <to-view-id>/welcome.jsp</to-view-id> </ navigation-case> </navigation-rule>

<managed-bean> <managed-bean-name>user</managed-bean-name> <managed-bean-class>com.corejsf.UserBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> </faces-config>

Page 16: Java Server Faces JSF Training PPT - IonIdea

16

Configuration File(Cntd.)• faces-config.xml defines how one page will navigate to next.

Also specifies managed beans.<navigation-rule> <from-view-id>/index.jsp</from-view-id> <navigation-case> <from-outcome>login</from-outcome> <to-view-id>/welcome.jsp</to-view-id> </navigation-case></navigation-rule

• <from-view-id> page you are currently on.• <to-view-id> next page to display.• <from-outcome> value matches the action attribute of the

command button of index.jsp<h:commandButton value="Login" action="login"/>

Page 17: Java Server Faces JSF Training PPT - IonIdea

17

Configuration file (Cntd.)

• Managed bean is the model of the framework.• <managed-bean-name> is the name the views use to

reference the bean.<managed-bean-name>user</managed-bean-name>

<h:inputText value="#{user.name}“ required=“true”/>

• <managed-bean-class> is the fully classified name for the

bean.<managed-bean-class> com.corejsf.UserBean </managed-bean-class>

<managed-bean-scope>session</managed-bean-scope>

Page 18: Java Server Faces JSF Training PPT - IonIdea

18

Web.xml (Deployment Descriptor)

<context-param><param-name> javax.faces.CONFIG_FILES</param-name><param-value> /WEB-INF/faces-config.xml</param-value> <description> </description></context-param><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></servlet-mapping>

Page 19: Java Server Faces JSF Training PPT - IonIdea

19

Web.xml (Cntd.)• Javax.faces.CONFIG_FILES parameter tells where the JSF configuration file

exists.<param-name> javax.faces.CONFIG_FILES</param-name><param-value> /WEB-INF/examples-config.xml</param-value>

• Javax.faces.STATE_SAVING_METHOD specifies where the state must be saved: client or server.

<param-name> javax.faces.STATE_SAVING_METHOD</param-name>

<param-value>server</param-value> • The servlet-mapping and servlet blocks specify that any URL that ends in

a .jsf extension should be redirected through a servlet called javax.faces.webapp.FacesServlet.

Page 20: Java Server Faces JSF Training PPT - IonIdea

Life cycle of JSF

Page 21: Java Server Faces JSF Training PPT - IonIdea

Questions?

Page 22: Java Server Faces JSF Training PPT - IonIdea

JSF Tags• JSF application typically uses JSP pages to represent views. JSF provides

useful special tags to enhance these views. Each tag gives rise to an associated component. JSF provides 43 tags in two standard JSF tag libraries:

• JSF Core Tags Library and • JSF Html Tags Library • Even a very simple page uses tags from both libraries.• <%@ taglib uri=”http://java.sun.com/jsf/core “ prefix=”f” %>

<%@ taglib uri=”http://java.sun.com/jsf/html “ prefix=”h” %><f:view><h:form>…………………………</h:form></f:view>

Page 23: Java Server Faces JSF Training PPT - IonIdea

23

What is Apache MyFaces?• First free open source implementation of JSF.• Provides rich set of prefabricated components.• Tomahawk

• Original MyFaces component library.

• <%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%>

• Tobago• Apache Library now under MyFaces umbrella.

• Trinidad• Originally Oracle ADF components.

Page 24: Java Server Faces JSF Training PPT - IonIdea

JSF Tags

Page 25: Java Server Faces JSF Training PPT - IonIdea

• JSF HTML Tag Referencehtml tags provided in JSF.

• JSF column TagUsed for creating columns of a table. This tag creates a data column inside a data table.<h:dataTable border="1"> <f:facet name="header"> <h:outputText value="This is header."/> </f:facet> <h:column> <f:facet name="header"> <h:outputText value="Student"/> </f:facet> </h:column>

• JSF commandButton TagThis tag renders an HTML submit button. This button can be associated with bean.

• <h:commandButton image="/unprotected/images/buttons/finish.JPG" id="pmsfinishbutton" value="Finish" title="FINISH" type="" action="#{Navigation.next}" onclick="return submitdisableButton('pmsfinishbutton');" />

Page 26: Java Server Faces JSF Training PPT - IonIdea

• JSF commandLink TagJSF commandLink tag which is rendered as a anchor tag.

• <h:commandLink value="Modify Existing Ticker Items" style="color: red" action="#{TickerHelperBean.allTickerResponse}"/>

• JSF dataTable TagThis tag is used to create table on the page. The component is rendered as an html <table> element.

• JSF form TagThis tag renders html form element which contains the data that is submitted with the form. This tag uses "POST" method.

<h:form id="tvhardware"> </h:form>

Page 27: Java Server Faces JSF Training PPT - IonIdea

• JSF graphicImage TagThis displays the image on the page. This tag renders an html "img" element.

• <t:graphicImage value="/unprotected/images/content_heading_arrow.jpg" width="19" height="33"/>

• JSF inputHidden TagThis tag is used to create the field that is invisible to the user.

• <h:inputHidden binding="#{Navigation.currentPage}" value="AppointmentScheduling"/>

• JSF inputSecret TagThis tag is used to create a text box for having password that is secret.

• JSF inputText TagThis tag is used to create html input element which has the type "text". It creates input text field where text can be entered.

• <t:inputText id="searchCriteria" value="#{organisationManagementMB.searchOrganisationHelper.searchCriteria}" />

• JSF inputTextarea TagThis tag is used to render html "textarea" element . It creates input text area where text can be entered in multiple lines.

Page 28: Java Server Faces JSF Training PPT - IonIdea

• JSF message TagThis is used to display the most recent message for the component.

• JSF messages TagThis tag is also like message tag which is also used to show all messages for the components. If you want to customize the message then CSS can be used.<t:panelGrid columns="1" border="0" cellspacing="1" columnClasses="footercolumnClass1,footercolumnClass2,footercolumnClass3">

<h:messages layout="list" errorClass="labelsnonmandatory" errorStyle="color:red" showDetail="true"/>

<t:panelGrid width="100%" id = "errorHeader" cellspacing="0" align="center" > <t:outputText value="Errors : " styleClass="error_messages"/> </t:panelGrid> <t:panelGrid/> •

JSF outputFormat TagThis tag is used for showing output with the parameterized text that facility allows you to customize the appearance of the text using CSS styles also.

<h:outputFormat escape="false" value="#{mess.message}" styleClass="labelsnonmandatory" style="color:red"></h:outputFormat>

<h:outputFormat value="Hello, {0} !"> <f:param value="chandan"/> </h:outputFormat> This tag is used for creating component for displaying formatted output as text.

Page 29: Java Server Faces JSF Training PPT - IonIdea

• JSF outputLabel TagThis is the outputLabel tag which show the text labeled with the specific component created in your application.<t:outputLabel value="Report Type : “ styleClass="labelsnonmandatory"/>

• JSF outputLink TagThis is the outputLink which show the output text holding a link of a page or a website location. This link is similar from the link created by the JSF commandLink tag text.<h:outputLink styleClass="ordercart_lable2" value="#{request.contextPath}/servlet/printing?contractNo=#{item.contractID}“ onclick ="setBunload(false);" >Print</h:outputLink>

• JSF outputText Tag<h:outputText styleClass="labelsnonmandatory" value=" #{helper.appointmentSearchString}" rendered="#{helper.orderItemCapture.orderItem.orderItemAppointmentTO!=null}"/>

Page 30: Java Server Faces JSF Training PPT - IonIdea

• JSF panelGrid TagThis tag is used create compound component that is used to layout other components. This tag renders html table with specified no. of columns.<t:panelGrid width="100%" columns="3" columnClasses="td_heading1,td_heading2" cellspacing="0" cellpadding="0">

<t:graphicImage value="/unprotected/images/content_heading_arrow.jpg" width="19" height="33"/>

<t:panelGroup> <t:outputLabel value="Create New Mobile Customer"/> <a4j:status startText="Updating..." startStyleClass="labels"/> </t:panelGroup> </t:panelGrid>

JSF panelGroup TagThis is used to create a component that acts as a container to group a set of components. All these components are under one component or can say one parent.

JSF selectBooleanCheckbox TagselectBooleanCheckbox tag is used to create checkbox.<t:selectBooleanCheckbox id="checkbox1" value="#{orderCapture.salesOrder.customerDetailsTO.companyMemorandumProvided}"></t:selectBooleanCheckbox>

Page 31: Java Server Faces JSF Training PPT - IonIdea

JSF selectManyCheckbox Tag

It is used to provide the user to select many items from a list of options. The user can select one or more options.

JSF selectManyMenu TagThis is used to select more than one items from a set of options.

JSF selectOneMenu Tag

This is used to display the element that enables the user to select only one among the list of available options.<t:selectOneMenu id ="noofsignatories" value="#{orderCapture.customerDetailsHelper.numberOfSignatories}" >

<a4j:support event="onchange" reRender="signatories" ajaxSingle="true" />

<f:selectItem id="selectitem1" itemLabel="1" itemValue="1"></f:selectItem></t:selectOneMenu>

Page 32: Java Server Faces JSF Training PPT - IonIdea

JSF selectOneRadio TagThis allows the user to select one option from a set of available options.<h:selectOneRadio id="activeProfile" value="#{TariffLinkManaged.selectedProfile}" styleClass="labels"

layout="lineDirection" > <f:selectItems id="selectedProfile"

value="#{TariffLinkManaged.profileOptions}" /> </h:selectOneRadio>

Page 33: Java Server Faces JSF Training PPT - IonIdea

All JSF Core Tags: f :view Creates the top-level viewf:subview Creates a subview of a view<f:view> <t:panelLayout id="page" layout="classic" width="1000" cellpadding="0"

border="0" align="center" bodyClass="panel_body" navigationClass="panel_leftnav" >

<f:facet name="header"> <f:subview id="header"> <%@ include file="/protected/subpages/header.jsp"%> </f:subview> </f:facet> <f:facet name="navigation"> <f:subview id="menu"> <%@ include file="/protected/subpages/leftShoppingCart.jsp"%>

</f:subview> </f:facet>

Page 34: Java Server Faces JSF Training PPT - IonIdea

<f:facet name="body"> <f:subview id="body1" rendered="true"> <%@ include

file="/protected/additionalorderitems/subpages/sub_activatemaliciouscalltracing.jsp"%>

</f:subview> </f:facet> <f:facet name="footer"> <f:subview id="footer"> <%@ include file="/protected/subpages/footer.jsp"%> </f:subview> </f:facet> </t:panelLayout> </f:view>

Page 35: Java Server Faces JSF Training PPT - IonIdea

• f:param Constructs a parameter component• <t:commandLink value="Modify discount schemes" type="submit"

action="#{organisationManagementMB.modifyOrganisationDiscounts}" styleClass="black_link" >

• <f:param name="selectedOrganisationForModification" value="#{record.organisationId}" />

• </t:commandLink>

• f:attribute Adds an attribute to a component• <h:commandButton id="button1">

<f:attribute name="value" value="Click"></f:attribute></h:commandButton>

Page 36: Java Server Faces JSF Training PPT - IonIdea

• f:converter Adds an arbitrary converter to a component• <h:inputText id="name">

<f:converter converterId="javax.faces.Short"/></h:inputText>

• f:converterDateTime Adds a datetime converter to a component• <h:outputText value="#{MyBean.today}">

<f:convertDateTime type="both" dateStyle="short"/></h:outputText>

• dateStyle : This is used to set the style of date to be presented to the page. This attribute is applied only if the type attribute is "date" or "both". This attribute can take some values like :

• default May 14, 2007 2:35:45 PM ( Default Value)• short 5/14/07 12:55:42 PM• medium May 14, 2007 2:42:36 PM• long May 14, 2007 2:41:08 PM• full Monday, May 14, 2007 2:39:56 PM

• f:converterNumber Adds a number converter to a component• This class is responsible to convert String to java.util.Number object and vice-versa.

• f:actionListener Adds an action listener to a component• <h:commandButton id="button1" value="Click">

<f:actionListener type=“test.MyBean" /></h:commandButton>

• public class MyBean implements ActionListener,ValueChangeListener{String som = "";private Date today = new Date();public void processAction(ActionEvent e){J}

•public void processValueChange(ValueChangeEvent ce){}

Page 37: Java Server Faces JSF Training PPT - IonIdea

• f:valueChangeListener Adds a valuechange listener to a component• f:validator Adds a validator to a component• <h:inputText id="email" required="true">

<f:validator validatorId="checkvalidemail" /></h:inputText>

• f:validateDoubleRange Validates a double range for a component’s value• f:validateLength Validates the length of a component’s value• <h:inputSecret id="PWD" value="#{MessageBean.b}" required="true" >

<f:validateLength maximum="15" minimum="6"/></h:inputSecret>

• f:validateLongRange Validates a long range for a component’s value• f:facet Adds a facet to a component• f:loadBundle Loads a resource bundle, stores properties as a Map• <f:loadBundle basename="RB" var="mes"/>

<f:view> <html> <body> <h:form> <h:outputText value="#{mes.greeting_text}" /> </h:form>

• f:selectitems Specifies items for a select one or select many component• f:selectitem Specifies an item for a select one or select many component• f:verbatim Adds markup to a JSF page

Page 38: Java Server Faces JSF Training PPT - IonIdea

Rich Faces

• “RichFaces is a rich component library for• JSF and an advanced framework for• easily integrating AJAX capabilities into• business application development.”• which really means.....• I don't NEED to know JavaScript.

Page 39: Java Server Faces JSF Training PPT - IonIdea

• JavaServer Faces• +• AJAX• =• JBoss RichFaces• Rich JSF Components

Page 40: Java Server Faces JSF Training PPT - IonIdea

• A framework designed to add Ajax-functionality to• existing JSF solutions.• • JSF tags are augmented with additional RichFaces

tags• to provide this special functionality.

Page 41: Java Server Faces JSF Training PPT - IonIdea

<%@ taglib uri="https://ajax4jsf.dev.java.net/ajax"prefix="a4j"%><%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%><%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%><html><head><title>Repeater </title></head><body><f:view><h:form><h:inputText size="50" value="#{bean.text}" ><a4j:support event="onkeyup" reRender="rep"/></h:inputText><h:outputText value="#{bean.text}" id="rep"/></h:form></f:view></body></html>

Page 42: Java Server Faces JSF Training PPT - IonIdea

• package demo;• public class Bean {• private String text;• public Bean() {}• public void setText(String text) {• this.text = text;• }• public String getText() {• return text;• }• }

Page 43: Java Server Faces JSF Training PPT - IonIdea

• RichFaces has three tags used to fire an Ajax request.• – <a4j:commandButton>• – <a4j:commandLink>• – <a4j:support>• • The two first are used to render a button and a link,• respectively, with Ajax-functionality. The support tag is• used to add functionality to an existing component.• – AjaxCommandButton: renders a button for submitting a

form.• – AjaxCommandLink: renders a link for submitting a form.• – AjaxCommandSupport: delivers Ajax support for existing• elements (such as e.g. input fields).

Page 44: Java Server Faces JSF Training PPT - IonIdea

By using attributes on the Action Components, it is possible to control how much is sent with the request – and what is updated

by the response:– ajaxSingle: this attribute defines that only that specific

component is sent with the request.– reRender: a comma separated list of components to berendered from the response.<h:form><h:inputText value="#{person.name}" ><a4j:support event="onkeyup" reRender="test"ajaxSingle="true"/></h:inputText><h:inputText value="#{person.middleName}"/>

Page 45: Java Server Faces JSF Training PPT - IonIdea

It is possible to integrate custom JavaScript with these componentsusing these two attributes:– onsubmit: JavaScript code to execute before the form is sent (e.g. forchecking request parameters client side).– oncomplete: JavaScript code to execute after the Ajax response hasreturned (e.g. for post-processing the response).<a4j:outputPanel id="panel"><h:form><h:selectOneMenu value="#{bean.text}"><f:selectItem itemValue="Danmark" itemLabel="Danmark"/><f:selectItem itemValue="Norge" itemLabel="Norge"/><f:selectItem itemValue="Sverige" itemLabel="Sverige"/><a4j:support event="onchange" reRender="panel"onsubmit="if(!confirm(’Are you sure that you want to switch country?')){form.reset(); return false;}"oncomplete="alert(’The value was saved server-side!')"/></h:selectOneMenu><br/><h:outputText value="#{bean.text}"/>

Page 46: Java Server Faces JSF Training PPT - IonIdea

• In general, data being sent in a RichFaces request will bedelimited by a form tag (<a4j:form> or <h:form>).• When the server receives the request, the contents of itwill be decoded by the Faces servlet, which leads the JSFcomponent tree to be updated. Then the response is sentback to the client through the RichFaces renderkit.• The decode process, however, does take up a reasonableamount of resources. The tag <a4j:region> is useful fordelimiting the number of components to decode,reducing the performance hit.• Note that the entire contents of the form is still sent inthe request (and received in the response) – but only theregion is processed.

Page 47: Java Server Faces JSF Training PPT - IonIdea

Output Components• RichFaces offers certain components torender output.• These components are output panelsOutput panels ”ajaxify” a part of the page and makes this part

sensitive to changes in the surrounding Ajax Container (region or view root).

• Transient contents (raw HTML or the JSF <verbatim> tag), which usually is not saved in the component tree, will be added to the tree anyway for quick access.

• The tag <a4j:outputPanel> is used for this – or the classHtmlAjaxOutputPanel.

• The tag generated a <span> or <div> tag in the client – depending on the value of the attribute layout.

Page 48: Java Server Faces JSF Training PPT - IonIdea

Status indicator for Ajax requests • With the tag <a4j:status> the user can be notified of the state of a current Ajax

request.• Programmatically, the class HTMLAjaxStatus is used:• The element has attributes representing text and style to be shown at start (Ajax

transferin progress) and stop (no Ajax request being processed currently), respectively – theseare named startText and stopText. Alternatively, JSF facets provide the same effect:<a4j:status startText="Progress" stopText="Done" for="stat1"><a4j:status for="stat2"><f:facet name="start"><h:graphicImage value="ajax_process.gif" /></f:facet><f:facet name="stop"><h:graphicImage value="ajax_stoped.gif" /></f:facet></a4j:status

Page 49: Java Server Faces JSF Training PPT - IonIdea

Custom Components

• Extend a UIComponent – Create a class that extends UIComponent – Save the component state – Register the component with faces-config.xml

• Define the renderer or implement inline – Override encode– Override decode– Register the renderer with faces-config.xml

• Create a custom tag that subclasses UIComponentTag – Return the renderer type– Return the component type– Set up properties that might use JSF expressions

Page 50: Java Server Faces JSF Training PPT - IonIdea

• import java.io.IOException; import javax.faces.component.UIOutput; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter;

• public class LabelComponent extends UIOutput{ private String label; public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } ...

Page 51: Java Server Faces JSF Training PPT - IonIdea

• @Override public Object saveState(FacesContext context) { Object values[] = new Object[2]; values[0] = super.saveState(context); values[1] = label; return ((Object) (values)); }

• @Override public void restoreState(FacesContext context, Object state) { Object values[] = (Object[])state; super.restoreState(context, values[0]); label = (String)values[1]; }

Page 52: Java Server Faces JSF Training PPT - IonIdea

• <faces-config> <component> <component-type>simple.Label</component-type> <component-class> arcmind.simple.LabelComponent </component-class> </component>

Page 53: Java Server Faces JSF Training PPT - IonIdea

• public class LabelComponent extends UIOutput{ ... public void encodeBegin(FacesContext context) throws IOException { ResponseWriter writer = context.getResponseWriter(); writer.startElement("label", this); writer.write(label); writer.endElement("label"); writer.flush(); } ... }

Page 54: Java Server Faces JSF Training PPT - IonIdea

• public class LabelComponent extends UIOutput{ ... public String getFamily(){ return "simple.Label"; } ... }

• public void encodeEnd(FacesContext context) throws IOException { return; } public void decode(FacesContext context) { return; }

Page 55: Java Server Faces JSF Training PPT - IonIdea
Page 56: Java Server Faces JSF Training PPT - IonIdea

• [LabelTag.java] public class LabelTag extends UIComponentTag { …

• protected void setProperties(UIComponent component) { /* you have to call the super class */

• super.setProperties(component); ((LabelComponent)component).setLabel(label); }

Page 57: Java Server Faces JSF Training PPT - IonIdea
Page 58: Java Server Faces JSF Training PPT - IonIdea

• <taglib> <tlib-version>0.03</tlib-version> <jsp-version>1.2</jsp-version> <short-name>arcmind</short-name> <uri>http://arcmind.com/jsf/component/tags</uri> <description>ArcMind tags</description> <tag> <name>slabel</name> <tag-class>arcmind.simple.LabelTag</tag-class> <attribute> <name>label</name> <description>The value of the label</description> </attribute> </tag> ...

Page 59: Java Server Faces JSF Training PPT - IonIdea

• [test.jsp] <%@ taglib prefix="arcmind" uri="http://arcmind.com/jsf/component/tags" %> ... <arcmind:slabel label="Form Test"/>

Page 60: Java Server Faces JSF Training PPT - IonIdea

Questions?