P. 1
JSF2 Overview

JSF2 Overview

|Views: 111|Likes:
Publicado porIlce Madridista

More info:

Published by: Ilce Madridista on May 23, 2011
Direitos Autorais:Attribution Non-commercial


Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less





© 2011 Marty Hall

JSF 2.0: Introduction 2 0: and Overview
Originals of Slides and Source Code for Examples: http://www.coreservlets.com/JSF-Tutorial/jsf2/
Customized Java EE Training: http://courses.coreservlets.com/
Servlets, JSP, JSF 2.0, Java 6, Ajax, jQuery, GWT, Spring, Hibernate, RESTful Web Services, Android. Developed and taught by well-known author and developer. At public venues or onsite at your location.

© 2011 Marty Hall

For live training on JSF 2.x, please see courses at htt // t http://courses.coreservlets.com/. l t /
Taught by the author of Core Servlets and JSP, More Servlets and JSP and this tutorial. Available at public JSP, tutorial venues, or customized versions can be held on-site at your organization.
•C Courses d developed and t l d d taught b M t H ll ht by Marty Hall • Courses developed and taught by coreservlets.com experts (edited by Marty)
– JSF, servlets/JSP, Ajax, jQuery, Android development, Java 6 programming, custom mix of topics – Ajax courses can concentrate on 1EE Training: http://courses.coreservlets.com/several Customized Java library (jQuery, Prototype/Scriptaculous, Ext-JS, Dojo, etc.) or survey

Servlets, JSP, Hibernate/JPA, EJB3, GWT, jQuery, GWT, RESTful Web Services RESTful Web Services, Android. – Spring, JSF 2.0, Java 6, Ajax, SOAP-based and Spring, Hibernate, Contact hall@coreservlets.com for details Developed and taught by well-known author and developer. At public venues or onsite at your location.

Topics in This Section
• Different views of JSF • Pros and cons of JSF
– Vs. standard servlet and JSP technology –V A h S Vs. Apache Struts – Vs. other Ajax approaches

• New features in JSF 2 0 2.0
– Vs. JSF 1.x


© 2011 Marty Hall

Customized Java EE Training: http://courses.coreservlets.com/
Servlets, JSP, JSF 2.0, Java 6, Ajax, jQuery, GWT, Spring, Hibernate, RESTful Web Services, Android. Developed and taught by well-known author and developer. At public venues or onsite at your location.

What is JSF?
• A set of Web-based GUI controls and handlers?
– JSF provides many prebuilt HTML i t d GUI controls, along id b ilt HTML-oriented t l l with code to handle their events.

• A device-independent GUI control framework?
– JSF can b used t generate graphics i f be d to t hi in formats other th HTML t th than HTML, using protocols other than HTTP.

• An MVC-based Web app framework?
– Like Apache Struts, JSF can b viewed as an MVC f ik A h S S be i d C framework f k for building HTML forms, validating their values, invoking business logic, and displaying results.

• An Ajax library?
– JSF 2.0 provides very easy-to-use Ajax support. So, JSF 2.0 can be viewed as an alternative to jQuery or GWT.

• B t which is the proper way t view JSF? But hi h i th to i

– The answer depends on what you are going to use it for, but 1 & 3 are the most common wasy of looking at JSF.

• Alternatives: traditional Web apps
– Servlets/JSP (with MVC) – Struts 2.0 – JSF 2 0 S 2.0

• Alternatives: Ajax-based Web apps
– Add jQuery ( Ext/JS, etc) to existing app jQ (or E t/JS t ) t i ti – Use the Google Web Toolkit and write everything in Java, following a Swing like style Swing-like – Use JSF 2.0 and add Ajax tags to page

• JSF 2.0 vs. JSF 1.x
– How does version 2 compare to version 1?

com/ Servlets.0. they redo the example using the framework and comment on how much better it is. Hibernate. the use of MVC with servlets and JSP 9 . Developed and taught by well-known author and developer. At public venues or onsite at your location. JSP. Servlets/JSP Customized Java EE Training: http://courses. GWT. Android. Spring. Java 6. Ajax. RESTful Web Services. t h h b tt i • This proves nothing • MVC – A fair comparison is to look at the use of the framework vs. jQuery.coreservlets. JSF 2.© 2011 Marty Hall JSF vs. The MVC Architecture • Bad JSP design –M Many b k or articles on Java-based Web frameworks books i l J b dW bf k start with this example: <h1>Tiny bit of HTML</h1> <% J % Java Java Java More Java %> M J <h1>Tiny bit of HTML</h1> – Then.

firstName} JSP1 JSP2 JSP3 10 Applying MVC: Bank Account Balances • Bean – B kC t BankCustomer • Business Logic – BankCustomerLookup • Servlet that populates bean and forwards to appropriate JSP page – Reads customer ID calls BankCustomerLookup’s ID.A Quick Review of MVC HTML or JSP Java Code (Business Logic) Results R l (beans) Form submit form (Form ACTION matches url-pattern of servlet) (Store beans in request. session. or application scope) q ( .setAttribute("customer". request. BankCustomerLookup s data-access code to obtain BankCustomer – Uses current balance to decide on appropriate result page • JSP pages to display results – – – – 11 Negative balance: warning page Regular balance: standard page High balance: page with advertisements added Hi h b l ith d ti t dd d Unknown customer ID: error page . currentCustomer). Servlet (Extract data from beans and put in output) p p ) ${customer.

dispatcher. if (currentCustomer == null) { address = "/WEB-INF/bank-account/UnknownCustomer.getCustomer BankCustomerLookup getCustomer (request. String firstName firstName. . 12 Bank Account Balances: Bean public class BankCustomer { p private final String id. this. firstName. currentCustomer). } 13 } . response). HttpServletResponse response) throws ServletException.jsp".abs(balance)). String address. private final double balance. IOException { BankCustomer currentCustomer = BankCustomerLookup. No setters.firstName = firstName.getParameter("id")).jsp". this. } else if (currentCustomer getBalance() < 0) { (currentCustomer.getRequestDispatcher(address). ( p q q .setAttribute("customer".lastName = lastName. public BankCustomer(String id. this. .getBalance() address = "/WEB-INF/bank-account/NegativeBalance. public double getBalanceNoSign() { return(Math.balance = balance. } // Getters for four instance variables.id = id.Bank Account Balances: Servlet Code public class ShowBalance extends HttpServlet { p public void doGet(HttpServletRequest request.forward(request. lastName. RequestDispatcher dispatcher = request. request.. g . String lastName.. double balance) { this. } .

BankCustomer> customers.xml … 15 . static { p p p // Populate Map with some sample customers } … public static BankCustomer getCustomer(String id) { return(customers.get(id)). } } 14 Bank Account Balances: Input Form … <fieldset> <legend>Bank Account Balance</legend> <form action=". use the address http://host/appName/show-balance that is set via url-pattern in web./show-balance"> p yp Customer ID: <input type="text" name="id"><br> <input type="submit" value="Show Balance"> </form> </fieldset> For the servlet.Bank Account Balances: Business Logic public class BankCustomerLookup { private static Map<String.

> > <!-.ShowBalance</servlet-class> </servlet> <servlet-mapping> l i <servlet-name>ShowBalance</servlet-name> <url-pattern>/show-balance</url-pattern> </servlet-mapping> ..firstName}.4 <web-app version="2 4" .ShowBalance --> <servlet> <servlet-name>ShowBalance</servlet-name> <servlet-class>coreservlets. we know where you live.gif" ALIGN="LEFT"> Watch out.0" encoding="UTF-8"?> <web app version 2.Bank Account Balances: JSP Code (Negative Balance) … <BODY> <TABLE BORDER=5 ALIGN="CENTER"> <TR><TH CLASS="TITLE"> We Know Where You Live!</TABLE> <P> <IMG SRC="/bank-support/Club.balanceNoSign} you owe us b f before it i t is too l t ! late! </BODY></HTML> 16 Bank Account Balances: web.xml web xml <?xml version="1... ${customer.Use the URL http://host/app/show-balance instead of http://host/app/servlet/coreservlets. <P> Pay us the $${customer.. </web-app> 17 .

Bank Account Balances: Results 18 Advantages of JSF (vs. However. and so on. JSF lets you use Ajax without explicit JavaScript programming and with very simple tags. you can use property="*" with jsp:setProperty to automatically p p populate a bean based on request p q parameters. 19 . . JSF extends this capability p y and adds in several utilities. • Integrated Ajax support – You can use jQuery. all of which serve to greatly simplify request param processing. changes in p particular values. Dojo. the Ajax calls know about the server-side business logic. The code can respond to particular buttons. . Also. MVC Using RequestDispatcher) • Custom GUI controls – JSF provides a set of API and associated custom t id t f APIs d i t d t tags t create HTML to t forms that have complex interfaces • There are many extra-rich third-party JSF libraries • Event handling – JSF makes it easy to designate Java code that is invoked when forms are submitted. certain user selections. • Managed beans – In JSP. or Ext-JS with servlets and JSP.

JSF has fewer online resources. you have to be comfortable with the servlet API and a large and elaborate framework that is almost equal in size to the core system. • Worse documentation 21 . This approach also lets Java and Web developers focus on their specific tasks without needing to know about the overall system layout. moderately easy with jQuery (quite easy if you know JavaScript already). True for both Mojarra and MyFaces. many JSF values are represented in XML or property files. Continued MVC) • Form field conversion and validation – JSF has builtin capabilities for checking that form values are in the required format and for converting from strings to various other data types. If values are missing or in an improper format. if you have an existing app and want to add in some small amounts of Ajax functionality it is functionality. This loose coupling means that files many changes can be made without modifying or recompiling Java code. the form can be automatically redisplayed with error messages and with the previously entered values maintained maintained. you To ith th t d d R tDi t h need to be comfortable with the standard JSP and servlet APIs. MVC with RequestDispatcher) • Bigger learning curve – T use MVC with the standard RequestDispatcher. JSF has a full-fledged p g page templating system that lets y build p g that share layout or p g y you pages y content • Centralized file-based configuration – Rather then hard-coding information into Java programs.0 is a big investment. and that wholesale changes can be made by editing a single file. Switching your app to JSF 2. and many first-time users find the resources first time online JSF documentation confusing and poorly organized. To use MVC with JSF. 20 Disadvantages of JSF (vs. g – Compared to the standard servlet and JSP APIs.Advantages of JSF (vs. • Page templating – Although JSP has jsp:include for reuse of content. – Similarly. Standard MVC). layout • Consistent approach – JSF encourages consistent use of MVC throughout your application.

JSP. Continued MVC) • Less transparent – Wi h JSF applications. .Disadvantages of JSF (vs. Standard MVC). Spring.coreservlets.0 support was weak in Eclipse 3. but good in pp p . Java 6. g NetBeans and Eclipse 3. GWT.com/ Servlets. JSF 2. Android. RESTful Web Services. Developed and taught by well-known author and developer.5. Struts 2 Customized Java EE Training: http://courses. Ajax. JSF 2. JSF applications are: • H d t understand Harder to d t d • Harder to benchmark and optimize • Undeveloped tool support p pp – There are many IDEs with strong support for standard servlet and JSP technology.6. 22 © 2011 Marty Hall JSF 2 vs. • Rigid approach – The flip side of the benefit that JSF encourages a consistent approach to MVC is that JSF makes it difficult to use other approaches.0 is pretty new. Hibernate. and JSF 2. there is a lot more going on With li i h i l i behind the scenes than with normal Java-based Web applications.0. At public venues or onsite at your location. As a result. jQuery.

0 is part of Java EE 6) . (vs Struts) • Custom components – JSF makes it relatively easy to combine complex GUIs into a single k l ti l t bi l GUI i t i l manageable component. IceFaces.Struts is a Serious Alternative • Situation – You d id that for your application. the benefits (power) decide h f li i h b fi ( ) of using a Web application framework [vs. servlets/JSP with MVC] outweigh the disadvantages (complexity) • Problem – JSF is not the only game in town • Alt Alternatives ti – Struts is the most popular alternative to JSF – But there are many more • • • • • Spring MVC Apache Wicket Apache Tapestry jMaki … 24 Advantages of JSF (vs. virtually none for Struts i t ll f St t • PrimeFaces. then you refer to them by name in the forms. JBoss RichFaces. Oracle ADF. and all servers that support Java EE include JSF (JSF 2. Web Galileo. Struts does not – There are many existing third-party component libraries for JSF. • Offi i l part of Java EE Official t fJ 25 – JSF is part of the Java EE spec. Struts is • Access to beans by name – JSF lets you assign names to beans. Apache Tomahawk. Struts has a complex process with several levels of indirection. … • Support for other display technologies – JSF is not limited to HTML and HTTP. Woodstock.

0 • Simpler controller and bean definitions – JSF does not require your controller and bean classes to extend any particular parent class (e.xml file.g.JSF Custom Components: Examples 26 Advantages of JSF (vs. Continued • Expression language – Th JSF expression l The i language i more concise and is i d powerful than the Struts bean:write tag. • Simpler config file and overall structure – Th faces-config. • More powerful potential tool support – The orientation around GUI controls and their handlers opens possibility of simple to use. execute). drag-and-drop IDEs 27 . JSF is simpler. In general.g.. Struts) (vs Struts). Struts does. • This is less advantageous vs.xml file is much easier to use than is the The f fi l fil i h i t th i th struts-config. Struts 2.. Action) or use any particular method (e.

Disadvantages of JSF (vs. (vs Struts) • Established base 28 Counter-Arguments re Established Base 29 .

Struts i is • Hey! Didn't I say this was an advantage of JSF? • Confusion vs. and more. but still not as powerful as Struts • Lack of client-side validation – Struts supports JavaScript-based form-field validation. JSF does not 31 . with JSF they are the same (blah. Struts). and numbers in a given range. Continued • Support for other display technologies – JSF i not li i d to HTML and HTTP S is limited d HTTP. length of input. credit card numbers..jsp) and the h dl ihS h f (bl h ) d h handler (blah. Disadvantages of JSF (vs. file names – The actual pages used in JSF end in . JSF only comes with validators for missing values.xhtml.Disadvantages of JSF (vs.jsf).do)have different URLs.xml • Self-submit approach 30 – With Struts. This causes many problems. the form (blah. in particular.faces or . • You can use third-party validation libraries with JSF (e. But the URLs used end in .g. Struts). Struts) Continued • Much weaker automatic validation – Struts comes with validators for email address. particular in JSF: • You cannot browse directories and click on links • It is hard to protect raw XHTML pages from access • It is hard to refer to non-faces pages in facesnon faces faces config. regular expressions.jsf. MyFaces/Tomahawk built on the Struts/Commons validation library).

0 vs 2 0 vs. g p p • JSF 2. Prototype/Scriptaculous. Developed and taught by well-known author and developer. jQuery. Ajax. YUI. Java 6. jQuery. Three Main Options • Traditional JavaScript library – Add JavaScript code to your existing Web app to add richer GUIs and to support asynchronous.© 2011 Marty Hall JSF 2. without explicit JavaScript programming 33 . Use RPC mechanism to talk to server.0.. Other Ajax Approaches j pp Customized Java EE Training: http://courses.g. Mootools • GWT – Write everything in Java. GWT.0 (or another framework with integrated Ajax support) – Use simple tags to perform Ajax requests. Spring. Google Closure. Dojo. RESTful Web Services. JSP. Client-side code gets compiled to JavaScript.com/ Servlets. Hibernate. At public venues or onsite at your location.coreservlets. Android. Ext-JS. incremental updates to your page • E. JSF 2.

Google Closure. Mootools – Which library is best is another hard question 34 • Different libraries have different strengths.NET. Ruby on Rails. YUI. last name. I have an entire talk on this question. PHP. or whatever) – You want to upgrade it by adding richer GUI elements and Ajax-enabled features – You do not want to start over and reimplement the existing functionality i i f i li • Best approach – Use JavaScript library with rich widgets and Ajax support • jQuery.Using a Traditional JavaScript Library • Scenario – You already built a Web app (using Java. Prototype/Scriptaculous. Ext-JS. Dojo. and bank account balance of customer with that ID – Show error message if ID does not exist • Goals – Do not reload the page – Use existing server-side logic • Approach – Use jQuery to pass ID to server via Ajax request and to insert result into page – Extend server to format customer as <ul> list 35 . Example: jQuery for Bank Customer Info • Functionality – Enter a customer ID – Show the first name. .

Bank Example: HTML … <fieldset> <legend>Find Customer Info</legend> <form id="customer-form"> Customer ID: <input type="text" name="customerID"/> <input type="button" value="Show Customer" id="customer-button"/> id " t b tt "/> </form> <div id="customer-region"/> </fieldset> / … 36 Bank Example: JavaScript $(function() { $("#customer-button"). $("# t b tt ") li k( h C t ) }).click(showCustomer). oad( d custo e by d . queryData).serialize(). $( #custo e $("#customer-region"). eg o ). function showCustomer() { var queryData = $("#customer-form").load("find-customer-by-id". } 37 .

IOException { String customerID = request. request. Customer customer = CustomerUtils.makeErrorMessage("ID"). g String customerData.makeBulletedList(customer). } else { customerData = ResultUtils. if (customer == null) { customerData = ResultUtils.getCustomer(customerID). } } 38 Bank Example: Results 39 .getParameter( customerID ). HttpServletResponse response) throws ServletException.print(customerData). out.getParameter("customerID").getWriter().Bank Example: Java public class FindCustomerByID extends HttpServlet { public void doGet(HttpServletRequest request request. } PrintWriter out = response.

Using GWT • Scenario – You are starting a new Web app – You want a large pure-Ajax app • L k lik a d kt application Looks like desktop li ti • Has complex client-server communication – For client-side code. and bank account balance of customer with that ID – Show error message if ID does not exist • Goals – Do not reload the page – Use straightforward server-side logic (no HTTP methods) – Return Customer object. last name. many data client side structures. not just String. to client • Approach – U GWT Use – Use Customer class on both client and server 41 . and few runtime errors • You want Java. you want strong typing. not JavaScript for the client! • Best approach – Use the Google Web Toolkit • Client-side Java code gets compiled to JavaScript • Powerful RPC mechanism for talking to server 40 Example: GWT for Bank Customer Info • Functionality – Enter a customer ID – Show the first name.

this. new ButtonCallback()). } … // Getters and setters } 42 Bank Example: Java (Core Client Code – Part 1) private class ButtonHandler implements ClickHandler { public void onClick(ClickEvent event) { String id = idBox. public Customer(String id. serviceProxy.getText().Bank Example: Java (Customer Class) public class Customer implements Serializable { private String id firstName lastName. private double balance. this.firstName = firstName. this. String lastName.balance = balance. ) double balance) { this. } } 43 . id. String firstName.findCustomer(id.id = id.lastName = lastName. firstName.

customerInfo. } } public void onFailure(Throwable caught) { Window.getFirstName() + " " + result.").alert("Unable to get data from server. return(service. } } 45 .setHTML(message).Bank Example: Java (Core Client Code – Part 2) private class ButtonCallback implements AsyncCallback<Customer> { public void onSuccess(Customer result) { if (result != null) { String message = result.getBalance().getLastName() + " has balance of $" + result. } 44 } Bank Example: Java (Core Server Code) public class DataServiceImpl extends RemoteServiceServlet implements DataService { public Customer findCustomer(String id) { CustomerLookupService service = new CustomerSimpleMap(). t f t ( ) } else { customerInfo.findCustomer(id)).setHTML("No such ID").

Bank Example: JavaScript This Thi page deliberately l ft blank d lib t l left bl k 46 Bank Example: Results 47 .

0 <f:ajax> tag – Leave server code unchanged 49 . not explicit JavaScript • Approach – U JSF 2 0 <f j > t Use 2.0 for Bank Customer Info • Functionality – Enter a customer ID – Show the first name. Struts 2. last name.0 • Scenario – You are starting a new Web app – You want a hybrid application • R Regular f l form submission and page navigation b i i d i ti • Ajax-enabled content • Richer controls – You don’t want to write a lot of JavaScript by hand • Best approach pp – Use a Web app framework that includes rich controls and integrated Ajax support • Java developers: JSF 2.0 • . and bank account balance of customer with that ID – Show error message if ID does not exist • Goals – Do not reload the page – Use existing server-side logic and bean names – Use familiar JSF tags.0.NET Ajax 48 Example: JSF 2.0.Using JSF 2. or Spring MVC 3.NET developers: ASP.

message}" id="ajaxMessage1"/></h2> </h:form> … 50 Bank Example: JavaScript This Thi page deliberately l ft blank d lib t l left bl k 51 .password}"/><br/> <h:commandButton value="Show Current Balance" { g j } action="#{bankingBeanAjax.Bank Example: JSF (Facelets) … <h:form> Customer ID: <h:inputText value="#{bankingBeanAjax.showBalance}"> <f:ajax execute="@form" render="ajaxMessage1"/> </h:commandButton> <br/> <h2><h:outputText value="#{bankingBeanAjax.customerId}"/><br/> Password: <h:inputSecret value="#{bankingBeanAjax.

format( Balance String format("Balance for %s %s is $% 2f".message = message. } 52 Bank Example: Java (Continued) public String showBalance() { if (!password.getFirstName(). } } return(null). public String getMessage() { return(message). $%. } else { CustomerLookupService service = new CustomerSimpleMap().getLastName(). customer = service.Bank Example: Java @ManagedBean public class BankingBeanAjax extends BankingBeanBase { private String message = "".getBalance()). 53 .equals("secret")) { (!password. if (customer == null) { message = " k "Unknown customer".findCustomer(customerId). t " } else { message = String.2f customer. customer. customer.equals( secret )) message = "Incorrect password".. } public void setMessage(String message) { this.

0 when: – You are starting a new Web app – It will be a combination of traditional form submissions and page navigation plus rich GUIs/Ajax content d i ti l i h GUI /Aj t t 55 .Bank Example: Results 54 Bottom Line • Use traditional JavaScript library when: – You have existing app already built – You want to incrementally add rich GUIs/Ajax to it • Use GWT when: – You are starting a new Web app – You want it to look like a desktop app (no page nav) – You have complex client-server comms • Use JSF 2.

coreservlets.0. GWT.x – – – – – – – – – Smart defaults S t d f lt Annotations to replace many faces-config.© 2011 Marty Hall JSF 2. Overview of JSF 2. jQuery.0 • New features vs. Android. At public venues or onsite at your location.0 vs. Spring. Developed and taught by well-known author and developer. Java 6. Ajax. JSF 1.com/ Servlets. JSF 1. JSF 2. RESTful Web Services.xml entries Ajax support Integrated support for facelets Simpler custom components More components and validators p Support for Groovy Ability to bookmark results pages Lots more • Downside – Simple installation and testing instructions hard to find • R tif i thi i th main point of next section Rectifying this is the i i t f t ti • Next section gives a whirlwind tour of main new JSF 2 features • Later sections give detailed tutorial on JSF 2.0 57 .x Customized Java EE Training: http://courses. JSP. Hibernate.

Ajax. Java 6.com/ Servlets. . RESTful Web Services. W bS h 6 Gl fi h 3. JSF 2. jQuery.5 or later – Also integrated into Glassfish 3 • Apache MyFaces – Main page: http://myfaces. Developed and taught by well-known author and developer. etc.dev. Android. WebLogic 11 WebSphere 8 8.0 Implementations • Sun/Oracle Mojarra – Main page: https://javaserverfaces.org/core20/ http://myfaces apache org/core20/ – Runs in any server supporting servlets 2. JSP.0. At public venues or onsite at your location.apache. GWT.Main JSF 2.0 is an official part of Java EE 6 • JB JBoss 6. 58 © 2011 Marty Hall Wrap-Up Customized Java EE Training: http://courses.coreservlets. Hibernate.net/ – Runs in any server supporting servlets 2.java. Glassfish 3 W bL i 11. Spring.5 or later – Also integrated into Apache Geronimo 3 • Any Java EE 6 server – JSF 2. Geronimo 3.

Better in every way.0. GWT. 60 • JSF 2 vs. Java 6. jQuery. JSF 2. • Only clear-cut answer in lecture! © 2011 Marty Hall Questions? Customized Java EE Training: http://courses. more builtin features • Ajax-enabled Web apps – U d ti existing project to add Updating i ti j t t dd Ajax capabilities • Use jQuery. or another JavaScript library p y – JSF 2 probably better than Struts 2 • Technical arguments about even. Ajax. Android. JSP. . Hibernate. At public venues or onsite at your location. JSF 1 – Version 2 is both more powerful and simpler.x. and is official part of Java EE 6 – New hybrid (page navigation plus Ajax) project • Use JSF 2 because of integrated Ajax support – New pure-Ajax (no page navigation) project • Use GWT – Other Java-based frameworks: No Java based • For mainstream corporate projects.Summary y • General Web apps – JSF 2 usually better than servlets/JSP with MVC • Higher-level. Spring. other frameworks (except possibly Spring MVC) have too small of a market share to be taken seriously.coreservlets. but JSF 2 has 3rd party component libraries industry libraries. Ext-JS. RESTful Web Services. momentum. Very big improvement over JSF version 1.com/ Servlets. Dojo. Developed and taught by well-known author and developer. regardless of technical features.

You're Reading a Free Preview

/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->