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?

© 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.com/ Servlets. jQuery. RESTful Web Services. they redo the example using the framework and comment on how much better it is. GWT. Hibernate. Java 6. At public venues or onsite at your location. Ajax. t h h b tt i • This proves nothing • MVC – A fair comparison is to look at the use of the framework vs. the use of MVC with servlets and JSP 9 .coreservlets. Developed and taught by well-known author and developer. Servlets/JSP Customized Java EE Training: http://courses. JSF 2. Spring.0. Android. JSP.

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. request. or application scope) q ( .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. 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.setAttribute("customer". session.

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

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

balanceNoSign} you owe us b f before it i t is too l t ! late! </BODY></HTML> 16 Bank Account Balances: web.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. <P> Pay us the $${customer. </web-app> 17 .4 <web-app version="2 4" .xml web xml <?xml version="1.Use the URL http://host/app/show-balance instead of http://host/app/servlet/coreservlets.. ${customer.> > <!-.ShowBalance</servlet-class> </servlet> <servlet-mapping> l i <servlet-name>ShowBalance</servlet-name> <url-pattern>/show-balance</url-pattern> </servlet-mapping> .. we know where you live.0" encoding="UTF-8"?> <web app version 2..ShowBalance --> <servlet> <servlet-name>ShowBalance</servlet-name> <servlet-class>coreservlets.gif" ALIGN="LEFT"> Watch out.firstName}..

Bank Account Balances: Results 18 Advantages of JSF (vs. changes in p particular values. . you can use property="*" with jsp:setProperty to automatically p p populate a bean based on request p q parameters. However. • Integrated Ajax support – You can use jQuery. Dojo. The code can respond to particular buttons. 19 . 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. . and so on. all of which serve to greatly simplify request param processing. the Ajax calls know about the server-side business logic. JSF lets you use Ajax without explicit JavaScript programming and with very simple tags. Also. certain user selections. or Ext-JS with servlets and JSP. • Managed beans – In JSP. JSF extends this capability p y and adds in several utilities.

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. Standard MVC). the form can be automatically redisplayed with error messages and with the previously entered values maintained maintained. • Worse documentation 21 . 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. layout • Consistent approach – JSF encourages consistent use of MVC throughout your application. True for both Mojarra and MyFaces. g – Compared to the standard servlet and JSP APIs. JSF has fewer online resources.0 is a big investment. • Page templating – Although JSP has jsp:include for reuse of content. if you have an existing app and want to add in some small amounts of Ajax functionality it is functionality. and that wholesale changes can be made by editing a single file.Advantages of JSF (vs. moderately easy with jQuery (quite easy if you know JavaScript already). This approach also lets Java and Web developers focus on their specific tasks without needing to know about the overall system layout. – Similarly. MVC with RequestDispatcher) • Bigger learning curve – T use MVC with the standard RequestDispatcher. If values are missing or in an improper format. To use MVC with JSF. Switching your app to JSF 2. many JSF values are represented in XML or property files. 20 Disadvantages of JSF (vs. you To ith th t d d R tDi t h need to be comfortable with the standard JSP and servlet APIs. 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. and many first-time users find the resources first time online JSF documentation confusing and poorly organized. This loose coupling means that files many changes can be made without modifying or recompiling Java code.

• 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. .6. Developed and taught by well-known author and developer. Standard MVC). GWT.0. At public venues or onsite at your location. Android. Struts 2 Customized Java EE Training: http://courses. Continued MVC) • Less transparent – Wi h JSF applications. RESTful Web Services.0 support was weak in Eclipse 3. As a result. Spring. 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. JSP. and JSF 2. Hibernate. g NetBeans and Eclipse 3.5.coreservlets. JSF 2. Java 6. but good in pp p . there is a lot more going on With li i h i l i behind the scenes than with normal Java-based Web applications. 22 © 2011 Marty Hall JSF 2 vs.com/ Servlets.Disadvantages of JSF (vs.0 is pretty new. jQuery.

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.Struts is a Serious Alternative • Situation – You d id that for your application. Web Galileo. Struts is • Access to beans by name – JSF lets you assign names to beans. … • Support for other display technologies – JSF is not limited to HTML and HTTP. Apache Tomahawk. Woodstock. Struts has a complex process with several levels of indirection. IceFaces. • Offi i l part of Java EE Official t fJ 25 – JSF is part of the Java EE spec. JBoss RichFaces. and all servers that support Java EE include JSF (JSF 2. Oracle ADF. (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. the benefits (power) decide h f li i h b fi ( ) of using a Web application framework [vs. Struts does not – There are many existing third-party component libraries for JSF.0 is part of Java EE 6) .

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

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

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

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

Google Closure. Prototype/Scriptaculous.Using a Traditional JavaScript Library • Scenario – You already built a Web app (using Java. Mootools – Which library is best is another hard question 34 • Different libraries have different strengths. I have an entire talk on this question.NET. YUI. Dojo. Ruby on Rails. Example: jQuery for Bank Customer Info • Functionality – Enter a customer ID – Show the first name. Ext-JS. 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 . last name. 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. . PHP.

function showCustomer() { var queryData = $("#customer-form").load("find-customer-by-id". $("# t b tt ") li k( h C t ) }).click(showCustomer).serialize().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"). oad( d custo e by d . eg o ). $( #custo e $("#customer-region"). } 37 . queryData).

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

not just String. many data client side structures. last name. and few runtime errors • You want Java.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. to client • Approach – U GWT Use – Use Customer class on both client and server 41 . 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. 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.

String lastName. } } 43 . ) double balance) { this. } … // 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. serviceProxy. this.lastName = lastName. id.id = id.Bank Example: Java (Customer Class) public class Customer implements Serializable { private String id firstName lastName.getText(). firstName. this.balance = balance. String firstName. this. new ButtonCallback()).findCustomer(id.firstName = firstName. private double balance. public Customer(String id.

setHTML("No such ID").findCustomer(id)).getBalance().getFirstName() + " " + result. t f t ( ) } else { customerInfo.setHTML(message).alert("Unable to get data from server.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. } } public void onFailure(Throwable caught) { Window. } } 45 .getLastName() + " has balance of $" + result. customerInfo. return(service."). } 44 } Bank Example: Java (Core Server Code) public class DataServiceImpl extends RemoteServiceServlet implements DataService { public Customer findCustomer(String id) { CustomerLookupService service = new CustomerSimpleMap().

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

NET developers: ASP.0. Struts 2.0 • . not explicit JavaScript • Approach – U JSF 2 0 <f j > t Use 2.0 <f:ajax> tag – Leave server code unchanged 49 .0 for Bank Customer Info • Functionality – Enter a customer ID – Show the first name. or Spring MVC 3.Using JSF 2.NET Ajax 48 Example: JSF 2.0. last name. 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 • 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.

Bank Example: JSF (Facelets) … <h:form> Customer ID: <h:inputText value="#{bankingBeanAjax.customerId}"/><br/> Password: <h:inputSecret value="#{bankingBeanAjax.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.showBalance}"> <f:ajax execute="@form" render="ajaxMessage1"/> </h:commandButton> <br/> <h2><h:outputText value="#{bankingBeanAjax.

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

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.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 .

com/ Servlets. Java 6. JSF 1. Spring. RESTful Web Services.0.© 2011 Marty Hall JSF 2.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. GWT.0 • New features vs.0 vs. JSF 2.coreservlets. Ajax. jQuery. Developed and taught by well-known author and developer. At public venues or onsite at your location. JSF 1. JSP. Hibernate. Android. Overview of JSF 2.0 57 .x Customized Java EE Training: http://courses.x – – – – – – – – – Smart defaults S t d f lt Annotations to replace many faces-config.

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

Summary y • General Web apps – JSF 2 usually better than servlets/JSP with MVC • Higher-level. 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. Spring. other frameworks (except possibly Spring MVC) have too small of a market share to be taken seriously. Developed and taught by well-known author and developer. • Only clear-cut answer in lecture! © 2011 Marty Hall Questions? Customized Java EE Training: http://courses.x. Better in every way. JSF 2.coreservlets. Ajax. or another JavaScript library p y – JSF 2 probably better than Struts 2 • Technical arguments about even. At public venues or onsite at your location. 60 • JSF 2 vs. . Java 6. jQuery. RESTful Web Services.0. momentum. Dojo. Hibernate. JSP. JSF 1 – Version 2 is both more powerful and simpler. Very big improvement over JSF version 1. GWT. 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. but JSF 2 has 3rd party component libraries industry libraries. regardless of technical features.com/ Servlets. Ext-JS. Android.

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)//-->