Your SlideShare is downloading. ×
0
1By Shaharyar Khanshaharyar.khan555@gmail.com
 Java Server Faces (JSF) is a Java-based Web applicationframework intended to simplify development integration ofweb-base...
 JSF is a request-driven MVC web framework for constructinguser interfaces using components Provides an event model for ...
4 JSF 2.1 (2010-10-22) — Current version. Second maintenance releaseof 2.0. Only very minor amount of spec changes JSF 2...
5Stable release2.1.9 (Mojarra ReferenceImplementation) / May 31, 2012;a month agoWebsitejavaserverfaces.java.netThe spec w...
 JSF creates “component tree” Each element corresponds to a UI value Steps in processing requesti. Restore viewii. Appl...
7shaharyar.khan555@gmail.com
 Components Renderers Managed beans Converters / Validators Controller (navigation model) Event handling Request li...
 JSF spec defines a standard set of components andrelationships The View layer (e.g. JSP) and the Java code on the serve...
10We can say that “Components are used to Separate businesslogic from presentation”shaharyar.khan555@gmail.com
 Component renderer encodes (generates the HTML) for thecomponent Renderer also decodes (sets component values from URLq...
 Glues the UI given by jsp files to the business logic of yourapplication Are simply JavaBeans following standard rules...
@NoneScopedManaged beans with a none scope are not instantiated nor storedin any other scope.Instead, they are instantiate...
@ViewScopedManaged beans registered in view scope remain available as long asthe user stays on the same view. Navigating a...
@ApplicationScopedManaged beans registered with an application scope retain theirvalues throughout the lifetime of the app...
 A kind of managed beans, although no technicaldifference with managed beanBacking beans – focus on UI of the applicatio...
17<managed-bean><managed-bean-name>library</managed-bean-name><managed-bean-class>com.oreilly.jent.jsf.library.model.Libra...
 JSF provides a very easy and best way for conversion andvalidation<h:inputText id="salary" value="#{testBean.salary}"   ...
 JSF provide a very smart way to validate the fields and ifvalidation fails then generate a error message define by adeve...
<h:form>Enter text in this box :<br> <h:inputText id="input_text" value="#{MessageBean.a}" required="true"/>   <h:message ...
 An attibute for=“” can be used to specify the id of acomponent whose error messages we need to display<h:inputText id="u...
 We can also validate by a backing bean method<h:inputText value="#{userBean.name}" validator="#{userBean.checkUsername}"...
The JSF navigation system is built on top of a simple rulesystem that answers thequestion, “which view should be shown nex...
 Navigation is a set of rules for choosing the next page to bedisplayed after a button or hyperlink component is clicked....
25Outcome What It Meanssuccess Everything worked. Go on to the next page.failure Something is wrong. Go on to an error pag...
26<h:commandButton value="Proceed to Page2" action="gotopage2" /><navigation-rule><from-view-id>/page1.xhtml</from-view-id...
27<navigation-rule><from-view-id>/login.xhtml</from-view-id><navigation-case><from-action>#{login.loginAction}</from-actio...
Here is a navigation rule that could be used with the examplejust described:<navigation-rule><from-view-id>/logon.jsp</fro...
<navigation-rule><from-view-id>/catalog.jsp</from-view-id><navigation-case><from-outcome>success</from-outcome><to-view-id...
 Events are created based on the request parameters. Each event is broadcasted to the related listeners.<h:commandButton...
 Even when you have event listeners, you almost always have actioncontrollers As before, these invoke business logic and...
 Listener is usually in the form bean class But can be in separate class if you use FacesContext to get the request or ...
<h:commandButton id="confirm" value="Confirm Age"       actionListener="#{userDetails.calculateAgeListener}"></h:commandBu...
 Facelets is an open source Web template system under theApache license and the default view handler technology (akaview ...
 Element conversion Templating Content re-useReferencing a fileCustom tagsComposite components Parameterized includ...
 ui:insert :Used in template file, it defines content that is goingto replace by the file that load the template. Thecont...
 ui:composition:If used with “template” attribute, the specified template isloaded, and the children of this tag defines ...
38<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/T...
 Apache MyFaces, Mojarra (or) Sun JSF also known asRI(reference implementation) , PrimeFaces are all JSFstandard implemen...
 Let see a simple login example of JSF<%@ page contentType="text/html"%><%@ taglib uri="http://java.sun.com/jsf/core" pre...
</tr><tr><td><h:outputText value="Enter Password: " /></td><td><h:inputSecret id="password"value="#{SimpleLogin.password}"...
public class SimpleLogin{String loginname;String password;public SimpleLogin(){}public String getLoginname(){return loginn...
<?xml version="1.0"?><!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN""http:/...
<?xml version="1.0"?><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc. //DTD Web Application 2.3//EN""http://java.sun.co...
 Annotations are very powerful and helpful mehanism. Now it is provided in every part of even JAVA as well as inmany fra...
 For this bean classpublic class SimpleLogin{//code implementation}46We provided this configuration in face-config.xml<ma...
 But if we create our class by placing annotation beforewriting our class then we can save ourself from theconfigurations...
48
Upcoming SlideShare
Loading in...5
×

Jsf

1,190

Published on

In this lecture I tried to cover almost all aspects of JSF 2.0.Also you can find the coding examples in tis lectures

Published in: Technology, Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,190
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
60
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Jsf"

  1. 1. 1By Shaharyar Khanshaharyar.khan555@gmail.com
  2. 2.  Java Server Faces (JSF) is a Java-based Web applicationframework intended to simplify development integration ofweb-based user interfaces It is part of the Java Platform, Enterprise Edition a standard framework for building presentation tiers for webapplications JSF is a spec which defines a component-based MVCframework2shaharyar.khan555@gmail.com
  3. 3.  JSF is a request-driven MVC web framework for constructinguser interfaces using components Provides an event model for wiring the interactions betweenthe UI and the application objects Also provide us strong navigation rules and support withother technologies like AJAX3shaharyar.khan555@gmail.com
  4. 4. 4 JSF 2.1 (2010-10-22) — Current version. Second maintenance releaseof 2.0. Only very minor amount of spec changes JSF 2.0 (2009-06-28) — Major release for ease of use, enhancedfunctionality, and performance. Coincides with Java EE 6. JSF 1.2 (2006-05-11) — Many improvements to core systems andAPIs. Coincides with Java EE 5. Initial adoption into Java EE. JSF 1.1 (2004-05-27) — (DEPRECATED) bug fix release. There wereno spec or HTML renderkit changes. JSF 1.0 (2004-03-11) — (DEPRECATED) the initial release of the JSFspecification. Separate release that wasnt part of any Java EE/J2EErelease.shaharyar.khan555@gmail.com
  5. 5. 5Stable release2.1.9 (Mojarra ReferenceImplementation) / May 31, 2012;a month agoWebsitejavaserverfaces.java.netThe spec was developed by involving many people fromorgs like Sun, Apache, IBM, Oracleshaharyar.khan555@gmail.com
  6. 6.  JSF creates “component tree” Each element corresponds to a UI value Steps in processing requesti. Restore viewii. Apply request valuesiii. Process validationsiv. Update model valuesv. Invoke applicationvi. Render response6shaharyar.khan555@gmail.com
  7. 7. 7shaharyar.khan555@gmail.com
  8. 8.  Components Renderers Managed beans Converters / Validators Controller (navigation model) Event handling Request lifecycle8shaharyar.khan555@gmail.com
  9. 9.  JSF spec defines a standard set of components andrelationships The View layer (e.g. JSP) and the Java code on the server usethese components to interact and pass data JSF tree is the current set of components in a Java objectgraph Components are represented using a tree.<f:view><h:form id=“form1”><h:outputText id=“lbl_name” value=“Name”><h:inputText id=“txt_name”value=“NameValue”></h:form></f:view>9shaharyar.khan555@gmail.com
  10. 10. 10We can say that “Components are used to Separate businesslogic from presentation”shaharyar.khan555@gmail.com
  11. 11.  Component renderer encodes (generates the HTML) for thecomponent Renderer also decodes (sets component values from URLquery string and form vars) Render is basically a response for the user view the page that was originally requested Or render a different page Renderers are grouped into render kits Default render kit is HTML Provide device independence w/o changing thetemplating language or components themselves11shaharyar.khan555@gmail.com
  12. 12.  Glues the UI given by jsp files to the business logic of yourapplication Are simply JavaBeans following standard rules a zero-argument (empty) constructor -- either by explicitly definingsuch a constructor or omit all constructors no public instance variables (fields) use accessor methods instead of allowing direct access to fields accessed through methods called getXxx and setXxx If class has method getTitle that returns a String, class issaid to havea String property named title Boolean properties use isXxx instead of getXxx12 Managed by the framework in Application, Session, View,Request, or no scopeshaharyar.khan555@gmail.com
  13. 13. @NoneScopedManaged beans with a none scope are not instantiated nor storedin any other scope.Instead, they are instantiated on demand byanother managed bean. Once created, they will persist as long asthe calling bean stays alive because their scope will match thecalling bean’s scope.@RequestScopedManaged beans registered with request scope will be instantiatedand stay available throughout a single HTTP request. This meansthat the bean can survive a navigation to another page, provided itwas during the same HTTP request.13shaharyar.khan555@gmail.com
  14. 14. @ViewScopedManaged beans registered in view scope remain available as long asthe user stays on the same view. Navigating away from that viewwill cause beans registered in that view’s scope to be deallocated.@SessionScopedManaged beans registered with a session scope will be stored on theHTTP session.This means that the values in the managed bean willpersist beyond a single HTTP request for a single user. This is idealfor a shopping cart type of usage where values must be stored andmade available during multiple requests.14shaharyar.khan555@gmail.com
  15. 15. @ApplicationScopedManaged beans registered with an application scope retain theirvalues throughout the lifetime of the application and are availableto all users.Another scope which is “CustomScope” is also available but it is notimportant , So we skip that scope right now15shaharyar.khan555@gmail.com
  16. 16.  A kind of managed beans, although no technicaldifference with managed beanBacking beans – focus on UI of the application16shaharyar.khan555@gmail.com
  17. 17. 17<managed-bean><managed-bean-name>library</managed-bean-name><managed-bean-class>com.oreilly.jent.jsf.library.model.Library</managed-bean-class><managed-bean-scope>application</managed-bean-scope></managed-bean><managed-bean><managed-bean-name>usersession</managed-bean-name><managed-bean-class>com.oreilly.jent.jsf.library.session.UserSession</managed-bean-class><managed-bean-scope>session</managed-bean-scope></managed-bean><managed-bean><managed-bean-name>loginform</managed-bean-name><managed-bean-class>com.oreilly.jent.jsf.library.backing.LoginForm</managed-bean-class><managed-bean-scope>request</managed-bean-scope></managed-bean>shaharyar.khan555@gmail.com
  18. 18.  JSF provides a very easy and best way for conversion andvalidation<h:inputText id="salary" value="#{testBean.salary}"             required="true">    <f:convertNumber type="currency"/></h:inputText>it may display $1999, if the locale(faces-config.xml) is pointing toUS._______________________________________________<h:inputText id="discount" value="#{testBean.discount}"            required="true">    <f:convertNumber type="percent"/></h:inputText>By specifying the type as percentage, the display value will have a %symbol followed by the original value.18We can create our own custom converters.shaharyar.khan555@gmail.com
  19. 19.  JSF provide a very smart way to validate the fields and ifvalidation fails then generate a error message define by adeveloper. JSF provides different tags to handle and display messageson the view. There are two message tags in SUN’s referenceimplementation of JSF HTML library:<h:message /><h:messages /> We can place tag at the top of the form and set it to displayonly global messages<h:messages globalOnly="true" />19shaharyar.khan555@gmail.com
  20. 20. <h:form>Enter text in this box :<br> <h:inputText id="input_text" value="#{MessageBean.a}" required="true"/>   <h:message for="input_text" /><br>   <h:commandButton action="Submit" value="Submit"/>20shaharyar.khan555@gmail.com
  21. 21.  An attibute for=“” can be used to specify the id of acomponent whose error messages we need to display<h:inputText id="userName" value="#{userBean.userName}" /><h:message for="userName" /> Built-in validation components<h:inputText id="Username" value="#{UserBean.userName}">    <f:validateLength minimum="6" maximum="15"/></h:inputText>....<h:inputText id="Age" value="#{UserBean.age}">    <f:validateLongRange minimum="1" maximum="120"/></h:inputText>21shaharyar.khan555@gmail.com
  22. 22.  We can also validate by a backing bean method<h:inputText value="#{userBean.name}" validator="#{userBean.checkUsername}"></h:inputText>AND Same like converters, We can create a custom converter22shaharyar.khan555@gmail.com
  23. 23. The JSF navigation system is built on top of a simple rulesystem that answers thequestion, “which view should be shown next?” To answer thisquestion, the rule systemconsiders several different questions, such as “what is thecurrent view?” “which button waspressed?” “does the view which should be shown next actuallyexist?” and “am I allowed toshow the view which should be shown next?” and23shaharyar.khan555@gmail.com
  24. 24.  Navigation is a set of rules for choosing the next page to bedisplayed after a button or hyperlink component is clicked.Navigation rules are defined in the application configurationresource file. After the proper navigation rule is selected, the choice ofwhich page to access next from the current page depends ontwo factors:The action method that was invoked when thecomponent was clickedThe logical outcome that is referenced by thecomponent’s tag or was returned from the actionmethod24shaharyar.khan555@gmail.com
  25. 25. 25Outcome What It Meanssuccess Everything worked. Go on to the next page.failure Something is wrong. Go on to an error page.logon The user needs to log on first. Go on to the logon page.no results The search did not find anything. Go to the search pageagain.Common Outcome Stringsshaharyar.khan555@gmail.com
  26. 26. 26<h:commandButton value="Proceed to Page2" action="gotopage2" /><navigation-rule><from-view-id>/page1.xhtml</from-view-id><navigation-case><from-outcome>gotopage2</from-outcome><to-view-id>/page2.xhtml</to-view-id></navigation-case></navigation-rule>Notice that for this example a from-action is not needed; instead, the from-outcomeis compared to the action attribute of the navigation UI component (commandLinkor commandButton).shaharyar.khan555@gmail.com
  27. 27. 27<navigation-rule><from-view-id>/login.xhtml</from-view-id><navigation-case><from-action>#{login.loginAction}</from-action><from-outcome>success</from-outcome><to-view-id>/success.xhtml</to-view-id></navigation-case><navigation-case><from-action>#{login.loginAction}</from-action><from-outcome>failure</from-outcome><to-view-id>/failure.xhtml</to-view-id></navigation-case></navigation-rule></faces-config>At this point the application is complete with a successful navigation to thesuccess.xhtml page occurring when “guest” and “welcome” are entered in the loginpage, and a navigation to failure.xhtml when anything else is entered in the loginpage.shaharyar.khan555@gmail.com
  28. 28. Here is a navigation rule that could be used with the examplejust described:<navigation-rule><from-view-id>/logon.jsp</from-view-id><navigation-case><from-action>#{LogonForm.logon}</from-action><from-outcome>success</from-outcome><to-view-id>/storefront.jsp</to-view-id></navigation-case><navigation-case><from-action>#{LogonForm.logon}</from-action><from-outcome>failure</from-outcome><to-view-id>/logon.jsp</to-view-id></navigation-case></navigation-rule>28shaharyar.khan555@gmail.com
  29. 29. <navigation-rule><from-view-id>/catalog.jsp</from-view-id><navigation-case><from-outcome>success</from-outcome><to-view-id>/bookcashier.jsp</to-view-id></navigation-case><navigation-case><from-outcome>out of stock</from-outcome><from-action> #{catalog.buy} </from-action><to-view-id>/outofstock.jsp</to-view-id></navigation-case><navigation-case><from-outcome>error</from-outcome><to-view-id>/error.jsp</to-view-id></navigation-case></navigation-rule>29Note:<from-view-id>/books/*</from-view-id>Don’t get confuse if you see this linesomewhereshaharyar.khan555@gmail.com
  30. 30.  Events are created based on the request parameters. Each event is broadcasted to the related listeners.<h:commandButton action=“#{ReportCtrl.save}”>Generates an event when pressedsave() is a method on a managed bean JSF calls ReportController.save() Can also define action listeners associated with othercomponents in the formExample: AccountSearch on any page without having to tell JSFnavigation controller about each instance Custom ActionListenerImpl runs before invoking method30shaharyar.khan555@gmail.com
  31. 31.  Even when you have event listeners, you almost always have actioncontrollers As before, these invoke business logic and participate in navigation flow(via navigation-rule entries in config file) Setter methods and validation fire before action controller<h:form>…<h:commandButton value="Show Preview"action="#{resumeBean.showPreview}"/></h:form>31shaharyar.khan555@gmail.com
  32. 32.  Listener is usually in the form bean class But can be in separate class if you use FacesContext to get the request or session object and look up the form bean explicitly Takes an ActionEvent as an argument Void return type (not String as in action controllers) ActionEvent is in javax.faces.event ActionEvent has a getComponent method that lets you obtain the UIComponent reference From the UIComponent, you can get the component ID, renderer, and other low-level informationpublic void someMethod(ActionEvent event) {doSomeSideEffects();}32shaharyar.khan555@gmail.com
  33. 33. <h:commandButton id="confirm" value="Confirm Age"       actionListener="#{userDetails.calculateAgeListener}"></h:commandButton>______________________________________________public void calculateAgeListener(ActionEvent event) {       int calculatedAge = calculateAgeFromDOB();       if (event.getComponent().getId().equals("confirm")) {             if (calculatedAge != this.age) {                  this.isAgeCorrected = true;                  this.output = null;                  this.age = calculatedAge;             }       }}33Implemented inbacking beanshaharyar.khan555@gmail.com
  34. 34.  Facelets is an open source Web template system under theApache license and the default view handler technology (akaview declaration language) for JavaServer Faces (JSF) The language requires valid input XML documents to work Facelets supports all of the JSF UI components and focusescompletely on building the JSF component tree, reflecting theview for a JSF application Initially, Facelets was available as a separate, alternativeview declaration language for JSF 1.1 and JSF 1.2 which bothused JSP as the default view declaration language. Starting from JSF 2.0, Facelets has been promoted by the JSFexpert group to be the default view declaration language. JSPhas been deprecated as a legacy fall back34shaharyar.khan555@gmail.com
  35. 35.  Element conversion Templating Content re-useReferencing a fileCustom tagsComposite components Parameterized includes35shaharyar.khan555@gmail.com
  36. 36.  ui:insert :Used in template file, it defines content that is goingto replace by the file that load the template. Thecontent can be replace with “ui:define” tag. ui:define:Defines content that is inserted into template with amatching “ui:insert” tag. ui:include:Similar to JSP’s “jsp:include”, includes content fromanother XHTML page..36shaharyar.khan555@gmail.com
  37. 37.  ui:composition:If used with “template” attribute, the specified template isloaded, and the children of this tag defines the templatelayout; Otherwise, it’s a group of elements, that can beinserted somewhere. In addition, JSF removes all tags“outside” of “ui:composition” tag37shaharyar.khan555@gmail.com
  38. 38. 38<?xml version="1.0" encoding="UTF-8"?><!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:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"><h:body><h3>JSF 2.0 + Ajax Hello World Example</h3><h:form><h:inputText id="name" value="#{helloBean.name}"></h:inputText><h:commandButton value="Welcome Me"> <f:ajaxexecute="name" render="output" /></h:commandButton><h2><h:outputText id="output" value="#{helloBean.sayWelcome}"/></h2></h:form></h:body></html>shaharyar.khan555@gmail.com
  39. 39.  Apache MyFaces, Mojarra (or) Sun JSF also known asRI(reference implementation) , PrimeFaces are all JSFstandard implementations When we need additional features then we have to includethese implementations All these implementations provide us Additional tags andfeatures which are not available in JSF core.39shaharyar.khan555@gmail.com
  40. 40.  Let see a simple login example of JSF<%@ page contentType="text/html"%><%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%><%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%><f:view><html><head><title>JSF Simple Login Example</title></head><body><h:form><table><tr><td><h:outputText value="Enter Login ID: " /></td><td><h:inputText id="loginname"value="#{SimpleLogin.loginname}" /></td></tr>40shaharyar.khan555@gmail.com
  41. 41. </tr><tr><td><h:outputText value="Enter Password: " /></td><td><h:inputSecret id="password"value="#{SimpleLogin.password}" /></td></tr><tr><td> </td><td><h:commandButton value="Login"action="#{SimpleLogin.CheckValidUser}"/></td></tr></table></h:form></body></html></f:view>41shaharyar.khan555@gmail.com
  42. 42. public class SimpleLogin{String loginname;String password;public SimpleLogin(){}public String getLoginname(){return loginname;}public void setLoginname(String loginname){this.loginname = loginname;}public String getPassword(){return password;}public void setPassword(String password){this.password = password;}public String CheckValidUser(){if(loginname.equals("chandan") && password.equals("chand")){System.out.println("chandan"); return "success";} else{return "fail";}}}42shaharyar.khan555@gmail.com
  43. 43. <?xml version="1.0"?><!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN""http://java.sun.com/dtd/web-facesconfig_1_1.dtd"><faces-config><managed-bean><managed-bean-name>SimpleLogin</managed-bean-name><managed-bean-class>roseindia.SimpleLogin </managed-bean-class><managed-bean-scope>request</managed-bean-scope></managed-bean><navigation-rule><from-view-id>/login.jsp</from-view-id><navigation-case><from-action>#{SimpleLogin.CheckValidUser} </from-action><from-outcome>success</from-outcome><to-view-id>resultforsuccess.jsp</to-view-id></navigation-case><navigation-case><from-action>#{SimpleLogin.CheckValidUser}</from-action><from-outcome>fail</from-outcome><to-view-id>resultforfail.jsp</to-view-id></navigation-case></navigation-rule></faces-config>43shaharyar.khan555@gmail.com
  44. 44. <?xml version="1.0"?><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc. //DTD Web Application 2.3//EN""http://java.sun.com /dtd/web-app_2_3.dtd"><web-app><context-param><param-name>javax.faces.STATE_SAVING_METHOD </param-name><param-value>server</param-value></context-param><!-- Faces Servlet --><servlet><servlet-name>Faces Servlet</servlet-name><servlet-class>javax.faces.webapp.FacesServlet </servlet-class><load-on-startup> 1 </load-on-startup></servlet><!-- Faces Servlet Mapping --><servlet-mapping><servlet-name>Faces Servlet</servlet-name><url-pattern>*.jsp</url-pattern></servlet-mapping></web-app>44shaharyar.khan555@gmail.com
  45. 45.  Annotations are very powerful and helpful mehanism. Now it is provided in every part of even JAVA as well as inmany framesworks like JSF , Hibernate , JPA , EJB’s etc Let see how annotations are helpful for programmers. In previous slides We have seen that for navigation andsetting bean properties , We used faces-config.xml It is very annoying that we have to edit faces-config.xml filefor every navigation and for setting bean classes orproperties. Annotations gives us facility to handle these things withoutthis hectic configurations. Let see How 45shaharyar.khan555@gmail.com
  46. 46.  For this bean classpublic class SimpleLogin{//code implementation}46We provided this configuration in face-config.xml<managed-bean><managed-bean-name>SimpleLogin</managed-bean-name><managed-bean-class>roseindia.SimpleLogin </managed-bean-class><managed-bean-scope>request</managed-bean-scope></managed-bean>shaharyar.khan555@gmail.com
  47. 47.  But if we create our class by placing annotation beforewriting our class then we can save ourself from theconfigurations of faces-config.xml@ManagedBean@RequestScopedpublic class SimpleLogin{//code implementation}47 Like this , We have annotations for everything as well as forcomponents@FacesComponent@FacesRenderer@FacesConverter@FacesValidator@FacesBehaviorshaharyar.khan555@gmail.com
  48. 48. 48
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×