Upload
zballesta
View
226
Download
0
Embed Size (px)
Citation preview
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
1/61
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
2/61
Cagatay Civici
Apache MyFaces PMC
PrimeFaces Founder and Lead
Atmosphere (Comet) Committer
Author&Technical Reviewer
Regular speaker (JSFSummit, JSFDays) Consultant, Instructor, Mentor
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
3/61
What IS THIS ALL ABOUT?
Web Application Development with JSF
PrimeFaces
AJAX Ajax Push/Reverse Ajax/Comet
RIA
Mobile Devices, IPhone, Android ...
Google Guice and JPA
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
4/61
JSF
Standard (JSR)
Component Oriented
Latest JSF 2.0
Vendor support
Tools Extension Frameworks
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
5/61
Open Source Component Suite
Mobile Extensions
Ajax Push/Comet Compatible&Lightweight
PrimeFaces-Ext (Optimus&FacesTrace)
Overview
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
6/61
History
Started November 2008
1 year old
Monthly releases
Current
1.0.0.RC for JSF 1.2 2.0.0.RC for JSF 2.0
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
7/61
UI Components
70+ Rich set of components
Built-in Ajax
Partial Page Rendering
Ajax Push/Comet YUI and JQuery
TouchFaces - Mobile UI Kit
Simple Design Lightweight
Compatible with others
Unobstrusive Javascript
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
8/61
Advanced UI - Mock OS X
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
9/61
Simple setup
Resource Servlet
Namespace
p:resources
Lets Rock
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
10/61
Resource Servlet
! Resource Servlet! ! ! org.primefaces.resource.ResourceServlet! ! 1
! Resource Servlet! /primefaces_resource/*
Streaming and Caching (js, css, images)
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
11/61
p:resources
Renders ,
No hacks to
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
12/61
Try IT
!
!
http://primefaces.prime.com.tr/uihttp://primefaces.prime.com.tr/uihttp://www.w3.org/1999/xhtmlhttp://www.w3.org/1999/xhtml8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
13/61
EASY ajax
Ajax without javascript
Partial Page Rendering
Flexible (callbacks)
Ajax components
No different than regular process
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
14/61
PPR - Hello world
public class GreetingBean {
private String name;
//getters&setters
}
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
15/61
Declarative ajax
public class GreetingBean {private String name;
//getters&setters
}
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
16/61
Ajax Status
Declarative
Programmatic
! ! ! ! ! ! ! ! ! ! ! ! ! !! ! ! ! ! ! !
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
17/61
Ajax validations
Server validates, Client presents
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
18/61
p:ajax
Generic ajax component
Ajaxify standard components
Attach to dom events (eg blur)
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
19/61
Ajax remoting
Execute java methods
public class GreetingBean {
...
public void uppercase(ActionEvent event) {name = name.toUpperCase();
}
}
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
20/61
PPR Summary
Simple
Easy to Use
Flexible
Responsive
Fast
Ajax ViewHandler
Ajax StateManager
Ajax Servlet Filter
Ajax ViewRoot
DOM Tree Copy on Server
Partial Triggers
HTML Parser
Ajax Context
PPRPanel Ajax Regions
No need for ...
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
21/61
PPR Demo
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
22/61
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
23/61
Component SUITE Demo
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
24/61
Ajax Push/Comet
Http-Streaming or Long-Polling
Built on top of Atmosphere
CometContext.publish(...);
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
25/61
Techniques
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
26/61
Atmosphere
Portable Comet Framework
Write once, deploy anywhere
Even easier than Servlet 3.0
Reference JSF Integration: PrimeFaces
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
27/61
Chat App in 1Minute
function handlePublish(data) {! $('#display').append(data);}
public class ChatController {
private String message;
public void send(ActionEvent event) {
CometContext.publish(message);
}
//getters setters
}
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
28/61
TouchFaces
Mobile UI Kit
WebKit browsers
IPhone, Android, Palm...
Native IPhone UI
Integrated Ajax Regular JSF
PathFinder
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
29/61
TouchFaces UI
Special Components
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
30/61
TouchFaces in ACtion
Translate Chat - Ajax Push PathFinder - GPS TwitFaces
Weather Notes News
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
31/61
TouchFaces DEMO
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
32/61
Comparison with Others
Lighter
Simpler
Compatible
Ease of Use
From app developers to app developers
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
33/61
Optimus
Non-UI
Dump JSF Managed Beans
Google Guice Integration
JPA support
Orchestrates JSF-Guice-JPA
AOP, Security, Navigation extensions
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
34/61
Google GUICE
Guice aware JSF backing beans
@Controller
No xml
AOP support
Constructor, Setter, Field injection
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
35/61
Optimus Controllers
package com.mycompany.project;
@Controller(name=greetingBean, scope=Scope.REQUEST)
public class GreetingBean {
private String name;
//getters&setters
}
faces-config.xml
GreetingBean.java
greeting.xhtml
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
36/61
Dependency Injection
public interface GreetingService {
public void sayHi(String name);
}
public class GreetingServiceConsole implements GreetingService {
public void sayHi(String name) {
System.out.println(Hello + name);
}
}
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
37/61
Optimus Injection
@Controller(name=greetingBean, scope=Scope.REQUEST)
public class GreetingBean {
@Inject
private GreetingService greetingService;
}
faces-config.xml
GreetingBean.java
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
38/61
@Inject
Setter Injection
Constructor Injection
Field Injection
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
39/61
Setter Injection
@Controller(name=greetingBean, scope=Scope.REQUEST)
public class GreetingBean {
private GreetingService greetingService;
@Injectpublic void setGreetingService(GreetingService greetingService) {
this.greetingService = greetingService;
}
public GreetingService getGreetingService() {
return greetingService;
}...
}
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
40/61
Construction injection
@Controller(name=greetingBean, scope=Scope.REQUEST)
public class GreetingBean {
private GreetingService greetingService;
@Injectpublic void GreetingBean(GreetingService greetingService) {
this.greetingService = greetingService;
}
...
}
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
41/61
Field injection
@Controller(name=greetingBean, scope=Scope.Request)
public class GreetingBean {
@Inject
private GreetingService greetingService;
...
}
Warning: Bad practice for testing :)
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
42/61
ViewSCOPE
Between request and session scope
@Controller(name=greetingBean, scope=Scope.VIEW)
public class GreetingBean {
...}
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
43/61
Context Helpers
Abstracts coding against FacesContext
Use interfaces
Testable, no npe in testing
FacesMessages
Params
Session
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
44/61
Regular Waypublic class GreetingBean {
! public String loginClicked() {! ! boolean isValidUser = loginService.login(username, password);! ! if(isValidUser) {! ! ! return "mainpage";! ! } else {! ! ! //Evil code that makes your backing bean untestable! ! ! FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,"Invalid login", "Wrong username/password combination");
! ! ! FacesContext.getCurrentInstance().add(null, message);! ! ! //End of evil code! ! ! return "failed";! ! }! }
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
45/61
Testable way@Controller(name=greetingBean, scope=Scope.VIEW)
public class GreetingBean {
@Inject
private FacesMessages messages;
! public String loginClicked() {! ! boolean isValidUser = loginService.login(username, password);! ! if(isValidUser) {! ! ! return "mainpage";! ! } else {! ! ! messages.addError("Invalid login", "Wrong username/password combination");
return "failed";
! ! }! }}
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
46/61
Security Extensions
AuthContext
Page Level
Method Level
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
47/61
Page Security
EL extensions
#{authContext.username}
ifGranted, ifAllGranted, ifAnyGranted,
ifNonGranted
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
48/61
Method Securitypublic class ItemController {
public void deleteItem(ActionEvent event) {
if(Utils.isUserInRole(admin,editor))
throw new SecurityException();
else
//delete item
}
}
@Controller(name=greetingBean, scope=Scope.VIEW)
public class ItemController {
@Authorize(admin,editor)
public void deleteItem(ActionEvent event) {
//delete item
}}
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
49/61
JPA Support
Warp-Persist Integration
public class GreetingServiceJPA implements GreetingService {
@Injectprivate Provider em;
@Transactional
public void sayHi(String name) {
em.get().persist(...);}
}
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
50/61
Implicit navigations
No more XML
Convention over Configuration
Inspired JSF 2.0 navigations
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
51/61
Optimus Navigations
userDetail
faces-config.xml
userList.xhtml userDetail.xhtml
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
52/61
FAcesTrace
Trace Debug tool
Lifecycle visualizer
Performance tracker
DHTML Component Tree
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
53/61
FacesTrace demo
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
54/61
Integrate with
Seam, Spring, Guice ...
Examples
BookStore (PF-Optimus-Guice-JPA)
PhoneBook (PF-Seam-JPA)
MovieCollector (PF-Spring-JPA)
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
55/61
Documentation
Reference Documentation (300 pages)
Wiki
Screencasts
API&TLD Docs
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
56/61
Support
http://primefaces.prime.com.tr/forum Very active (20 posts per day, 3000+ members)
http://primefaces.prime.com.tr/forumhttp://primefaces.prime.com.tr/forum8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
57/61
Enterprise Support
2/4 hour average response time
Priority forum
Ticket based support portal
IM support over skype
JSF specific help
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
58/61
Whats next
More UI Components targeting 100+
IDE Support (PrimeIDE)
Pushing the limits of JSF
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
59/61
Upcoming UI
Organizer (iCal, Outlook)
TreeTable
Context Menu
Gesture
ProgressBar ...more
8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
60/61
Finale
Twitter: @cagataycivici, @primefaces
http://cagataycivici.wordpress.com
http://primefaces.prime.com.tr
https://atmosphere.dev.java.net/
http://primefaces.prime.com.tr/http://cagataycivici.wordpress.com/http://primefaces.prime.com.tr/http://primefaces.prime.com.tr/http://primefaces.prime.com.tr/http://primefaces.prime.com.tr/http://cagataycivici.wordpress.com/http://cagataycivici.wordpress.com/mailto:[email protected]:[email protected]8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1
61/61
Questions
and hopefully answers