PRIMEFACES Çağatay Çivici [email protected] Çağatay Çivici
Apache MyFaces PMC “The Definitive Guide to Apache MyFaces and Facelets” Co-Author Reference in “Core JSF 2nd Edition” (Sun Core Series) Technical reviewer of “JBoss Seam and Trinidad” and “Apache MyFaces” books Speaker in JSFOne, JSFDays, universities and local Java Groups. PrimeFaces founder and project lead Krank CRUD framework team member Trainer, Consultant, Mentor FC Barcelona fan Prime Teknoloji (UK-TURKEY) Prime Teknoloji
Consulting, Training, Software Development Agile Agile Agile, TDD, Patterns Java EE, JSF, Spring, Seam, JPA www.emlakharitam.com PrimeFaces www.prime.com.tr JSF
Joint Strike Fighter Crew: 1 Java Server Faces
Standard WEB Framework of JAVA EE Component Oriented Event driven Swing and WEB Apache MyFaces and Sun Mojarra (RI) Vendor support (Sun, IBM, Oracle, JBoss, Apache etc) Apache MyFaces
JSF 1.1 ve 1.2 implementation Tomahawk Trinidad Tobago Portlet Bridge RI Orchestra ExtVAL JSF Tools
Netbeans JBoss Tools MyEclipse Eclipse WTP JDeveloper IBM RAD IDEA Macromedia Dreamweaver Component Libraries
MyFaces Tomahawk MyFaces Trinidad MyFaces Tobago JBoss RichFaces IceFaces Quipukit NetAdvantage WebGalileo PrimeFaces
Open Source Rich Components Easy AJAX XML Free JSF Detailed Documentation Not a framework Open Source Model
May the source be with you Free :) Apache Software Foundation Experience http://code.google.com/p/primefaces/ Turkey and Open Source Turkish Support
Turkish Docs (160 + sayfa) Turkish enabled components Turkish support forum PrimeFaces Modules
UI Components Optimus FacesTrace Mutually Exclusive modules Installation
1) Download 2) Logging ve SLF4J 3) Resource Servlet 4) JSP or Facelets Taglib 5) p:resources Let’s ROCK! Manuel Download
Google code page:
http://code.google.com/p/primefaces/issues/list Maven Download
Serving packed resources (js, css, ...)
JSP Taglib
<%@ taglib uri="http://primefaces.prime.com.tr/ui" prefix="p" %>
Facelets Namespace
xmlns:p="http://primefaces.prime.com.tr/ui" JSF Page
UI Components
Rich components Easy AJAX Flash chart components Unobstrusive Javascript Yahoo UI, Prototype, Scriptaculous Rich Components
UIAjax DataTable AccordionPanel Dialog AutoComplete Editor Button ImageCropper Calendar Menu Captcha Panel Carousel Poll Charts Resizable ColorPicker Slider ConfirmDialog Tabview Tooltip Tree Easy AJAX
Partial Page Rendering - PPR Declarative AJAX Ajax Update
Ajax Status
Displaying Ajax request status Global Ajax Request indicator
Enables ajax on standard JSF components
Trigger on any DOM event blur, keyup, click, change Ajaxify Remoting
Invoking Java methods with JavaScript
Periodical Ajax Requests
private int number; public void increment(ActionEvent actionEvent) { number++; } Graphs
Chart components (Pie, Line, Column and more) Interactive Live data display Pie Chart Example
private List
public SaleReport() { sales = new ArrayList
ItemSelectEvent
private String message; public void selectSeries(ItemSelectEvent event) { mesaj = "Item Index: " + event.getItemIndex() + ", Series Index:" + event.getSeriesIndex(); } Live Data
Before After UI Components DEMO Javascript and PrimeFaces
YUI, Prototype, Scriptaculous PrimeFaces Namespace and Javascript API PrimeFaces.widget.* PrimeFaces.ajax.* Unobstrusive Javascript PrimeFaces.widget.*
PrimeFaces widgets Example: PrimeFaces.widget.Editor
PrimeFaces.ajax.*
Ajax API PrimeFaces.ajax.AjaxUtils PrimeFaces.ajax.AjaxRequest PrimeFaces.ajax.AjaxResponse
PrimeFaces.ajax.AjaxRequest(url, config, params);
Unobstrusive Javascript
Vanilla JSF
PrimeFaces
YAHOO.util.Event.addListener(“_id1”,”click”, function(e) { alert(‘Barca’);} Optimus
Non rendering goodies Guice integration Validators XML-free JSF PDF and Excel export Security Extensions and AOP Google Guice Integration
Guice based JSF beans @Controller for
public class CreateUser { ... } faces-config.xml
createUser.xhtml
@Controller(name=”createUser”, scope=Scope.REQUEST) public class CreateUser { ... } faces-config.xml
createUser.xhtml
Scan specific packages
package org.sopranos.project.ui;
@Controller(name=”createUser”, scope=Scope.REQUEST) public class CreateUser { ... } Dependency Injection
CreateUser UserDAO userDAO
implements
UserDAOJPA Dependency Injection
public interface UserDAO { public void save(User user); }
public interface UserDAOJPA implements UserDAO { public void save(User user) { //Persist with JPA, EntityManager.persist(user) } }
public class MainAppModule implements Module{ public void configure(Binder binder) { binder.bind(userDAO.class).to(UserDAOJPA.class).in(Scopes.SINGLETON); } }
No getter and setter
package fc.barcelona;
//imports
@Controller(name=”createUser”, scope=Scope.REQUEST) public class CreateUser {
@Inject private UserDAO userDAO;
//Other stuff
public String saveUser() { userDAO.save(user); } } Setter Enjeksiyonu
package fc.barcelona;
//imports
@Controller(name=”createUser”, scope=Scope.REQUEST) public class CreateUser {
private UserDAO userDAO;
@Inject public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO; }
//Other stuff
public String saveUser() { userDAO.save(user); } } Constructor Injection
package fc.barcelona;
//imports
@Controller(name=”createUser”, scope=Scope.REQUEST) public class CreateUser {
private UserDAO userDAO;
@Inject public CreateUser(UserDAO userDAO) { this.userDAO = userDAO; }
//Other stuff
public String saveUser() { userDAO.save(user); } } JPA Support persistence.xml
//filter mapping to Faces Servlet JPA Support web.xml
UserDAOJPA.java public interface UserDAOJPA implements UserDAO {
@Inject private EntityManager em;
public void save(User user) { em.persist(user); } } Transactions UserDAOJPA.java public void save(User user) { try{ em.getTransaction().begin(); em.persist(kullanici); em.getTransaction().commit(); }catch(Exception e){ em.rollbackTransaction(); } }
import org.primefaces.optimus.config.annotations.Transactional;
//...
@Transactional public void save(User user) { em.persist(user); } ViewScope
Page scope Between request and session scope
Req Create() Create() Create()
View Create()
Sess. Create()
create.xhtml create.xhtml create.xhtml JSF 1.x Navigation userList.xhtml userDetail.xhtml
faces-config.xml
faces-config.xml
UI Security
ifGranted ifAllGranted ifAnyGranted ifNonGranted AOP and @Authorize Method level security
package org.sopranos.project.ui;
@Controller(name=”createUser”, scope=Scope.REQUEST) public class CreateUser {
public String saveUser() { if(isAdmin()) { //... } } }
package org.sopranos.project.ui;
@Controller(name=”createUser”, scope=Scope.REQUEST) public class CreateUser {
@Authorize(“ROLE_ADMIN”) public String saveUser() { //... } } Exporter
Exports datatable data, Excel or PDF
HTML DataTable PDF Renderer playerDetail.jsf playerDetail.jsf?asPDF=true Collection ActionListener
List operations without custom java code
Regular Expression Validator Email Validator CreditCard Validator
Debug and Training tools Lifecycle visualizer Parameters (Request, Session vs) FacesMessages DHTML Component Tree Log4J support LifeCycle Visualizer FacesTrace DEMO Project Homepage http://primefaces.prime.com.tr/tr http://primefaces.prime.com.tr/en Documentation Referance Guide (160 + pages)
API ve TAG Docs WIKI Support and Help
Community forum Enterprise support Forum http://primefaces.prime.com.tr/forum/ Issue Tracker http://code.google.com/p/primefaces/issues/list Online Demo http://www.rehberharitam.com/primefaces-examples Coming Soon
JSF 2.0 compatibilty PrimeFaces 1.0 Drag-Drop components Flash based fileupload Conversation Scope More transaction management More JPA support Finale [email protected] http://cagataycivici.wordpress.com