Top Banner
PrimeFaces Next Generation Component Suite Cagatay Civici
52

Primefaces Nextgen Lju

Jul 15, 2015

Download

Technology

Skills Matter
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Primefaces Nextgen Lju

PrimeFacesNext Generation Component Suite

Cagatay Civici

Page 2: Primefaces Nextgen Lju

Cagatay Civici

• JSF Expert Group Member (JSR-314)

• PrimeFaces Founder and Lead

• Apache MyFaces PMC Member

• Atmosphere Ajax Push/Comet Committer

• Regular Speaker, Author, Technical Reviewer

• Co-founder of Prime Technology

Page 3: Primefaces Nextgen Lju

Prime Technology

• Agile and Java EE Consulting

• JSF, Spring, Seam, JPA

• Trainings (e.g. PrimeFaces, JSF 2.0)

• Outsource Development

• Istanbul/Turkey based

Page 4: Primefaces Nextgen Lju

What is this about?• PrimeFaces Component Suite

• RIA

• Ajax Push

• TouchFaces

• iPhone/Android/Palm

• GPS Navigation

• Mock OS X with JSF

• Interested?

Page 5: Primefaces Nextgen Lju

PrimeFaces• Next Generation Component Suite

• Designed with JSF 2.0 in mind

Page 6: Primefaces Nextgen Lju

History

• 1+ year old

• November 2008 - Start

• January 2009 - First Release 0.8.0

• 10 releases so far

• February 2010 - 1.0.0 and 2.0.0

Page 7: Primefaces Nextgen Lju

1.0.0 and 2.0.0

Page 8: Primefaces Nextgen Lju

Design Principles

• A good UI component should hide complexity but must keep flexibility

• Page author must be in full control

• Do not overuse JSF extensions

• Avoid extensions that can cause race conditions

• Avoid bringing overhead, keep it clean!

Page 9: Primefaces Nextgen Lju

UI Components

• 70+ Rich set of components

• Ajax powered or Client side

• YUI, jQuery and PrimeFaces widgets

• Unobstrusive Javascript

• Customizable and Easy to Use

• Compatible with “others”

• Skinning

Page 10: Primefaces Nextgen Lju

Extreme UI with PrimeFaces

Page 11: Primefaces Nextgen Lju

Simple Setup

JSF 1.2 JSF 2.0• ResourceServlet

• p:resources

• Taglib

• Ready!

• ResourceServlet (Opt)

• Taglib

• Ready!

Page 12: Primefaces Nextgen Lju

ResourceServlet• Streaming and Caching (js, css, images)

• Auto-Registered in Servlet 3.0 Environment

<servlet><servlet-name>Resource Servlet</servlet-name><servlet-class>org.primefaces.resource.ResourceServlet</servlet>

</servlet>

<servlet-mapping><servlet-name>Resource Servlet</servlet-name><url-pattern>/primefaces_resource/*</url-pattern>

</servlet-mapping>

Page 13: Primefaces Nextgen Lju

p:resources for JSF 1.2

• Renders <link />, <script />

• No hacks to head

• Not required in JSF 2.0 -> <h:head />

<head><p:resources />

</head>

Page 14: Primefaces Nextgen Lju

Ready!<html xmlns="http://www.w3.org/1999/xhtml"

xmlns:h="http://java.sun.com/jsf/html"xmlns:p="http://primefaces.prime.com.tr/ui">

<h:head>!</h:head>

<h:body>

! <p:editor />

<h:body>

</html>

Page 15: Primefaces Nextgen Lju

Unobstrusive UIJSF Markup

HTML Markup

<p:schedule id=”calendar ” value=”#{bean.value}” editable=”true”/>

<div id=”calendar”></div>

<script type=”text/javascript”>new PrimeFaces.widget.Schedule(‘calendar’, {editable:true});

</script>

Page 16: Primefaces Nextgen Lju

Output

Page 17: Primefaces Nextgen Lju

Easy Ajax

• Ajax without complexity

• Partial Page Rendering

• Flexible with Callbacks (e.g. onstart, oncomplete)

• Ajax components (e.g. autoComplete)

• Lightweight, No overhead

Page 18: Primefaces Nextgen Lju

PPR - Hello World

public class GreetingBean {private String name;//...

}

<h:form><h:inputText value=”#{greetingBean.name}” /><h:outputText id=”name” value=”Hi: #{greetingBean.name}” />

<p:commandButton value=”Ajax Submit” update=”name”/></h:form>

Page 19: Primefaces Nextgen Lju

p:ajax

• f:ajax extension

<h:inputText value=”#{greetingBean.name}”><p:ajax event=”blur” update=”name” />

</h:inputText>

<h:outputText id=”name” value=”Hi: #{greetingBean.name}” />

Page 20: Primefaces Nextgen Lju

Defining Ids

• Server id

• Client id

• Comma separated

• White space separated

• Mix

• Keywords

update=”text”

update=”form:text”

update=”text,panel”

update=”text panel”

update=”form:text grid”

update=”@form”

Page 21: Primefaces Nextgen Lju

Keywords

• @this

• @parent

• @form

• @all

• @none

update=”@parent”

Page 22: Primefaces Nextgen Lju

Partial Processing

• Decide what to process

• process attribute

• Ajax requests

• Non-ajax requests

process=”@this”

Page 23: Primefaces Nextgen Lju

Partial Processing - Case 1

<h:form><h:inputText id=”iamrequired” required=”true” />

<h:selectOneMenu id=”cities”><p:ajax update=”cities” process=”@this” />

</h:selectOneMenu>

<h:selectOneMenu id=”suburbs” /></h:form>

Page 24: Primefaces Nextgen Lju

Partial Processing - Case 2

<h:form><h:inputText id=”iamrequired” required=”true” />

<h:outputText id=”selected” />

<p:dataTable id=”table”><p:column>

<p:commandLink update=”selected” process=”table” /></p:column>

</p:dataTable></h:form>

Page 25: Primefaces Nextgen Lju

Partial Processing - Case 3

• Making immediate obsolete

<h:form><h:inputText id=”iamrequired” required=”true” />

<h:commandButton action=”navigate” immediate=”true” /></h:form>

<h:form><h:inputText id=”iamrequired” required=”true” />

<p:commandButton action=”navigate” process=”@this” /></h:form>

Page 26: Primefaces Nextgen Lju

Process vs Update

Process

Update

Restore View

Apply Request

Validations

Update Model

Invoke App

Render

Page 27: Primefaces Nextgen Lju

Notifying Users

• Declarative

• Programmatic

<p:ajaxStatus>! ! <f:facet name="start">! ! ! <p:graphicImage value="fancyanimation.gif" />! ! </f:facet>! !! ! <f:facet name="complete">! ! ! <h:outputText value="Request Completed" />! ! </f:facet></p:ajaxStatus>

<p:ajaxStatus onstart=”alert(‘Started’)” oncomplete=”alert(‘done’)” />

Page 28: Primefaces Nextgen Lju

Global vs Non-Global

• To trigger p:ajaxStatus or not

• Global (Default)

• Silent

<p:ajaxStatus>! ! <f:facet name="start">! ! ! <p:graphicImage value="fancyanimation.gif" />! ! </f:facet>! !! ! <f:facet name="complete">! ! ! <h:outputText value="Request Completed" />! ! </f:facet></p:ajaxStatus>

<p:commandButton value=”Submit” /

<p:commandButton value=”Submit” global=”false” /

Page 29: Primefaces Nextgen Lju

Component specific callbacks

• onstart

• onsuccess

• oncomplete

• onerror

<p:commandButton onstart=”return confirm(‘Sure’)”oncomplete=”alert(‘Done’);” />

Page 30: Primefaces Nextgen Lju

Callback Arguments

• From backing bean to ajax callbacks with JSON

<p:commandButton value=”Submit” action=”#{bean.save}”oncomplete=”handleComplete(xhr, status, args)” />

public void save() {RequestContext context = RequestContext.getCurrentInstance();context.addCallbackParam(“item”, item);

}

<script type=”text/javascript”>function handleComplete(xhr, status, args) {

alert(args.item.name);}</script>

Page 31: Primefaces Nextgen Lju

Ajax Remoting

• p:remoteCommand

public class GreetingBean {private String name;//...public void toUpperCase() {

name = name.toUpperCase();}

}

<p:remoteCommand name=”upperCase” actionListener=#{greetingBean.toUppterCase} />

<script type=”text/javascript”>upperCase();

</script>

Page 32: Primefaces Nextgen Lju

PPR Summary

• Simple

• Easy to Use

• Flexible

• Responsive

• Lightweight

• Keep it clean

No Need ForAjax Servlet Filter

Html Parser

Ajax ViewHandler

Ajax StateManager

Ajax Regions

Ajax*

Page 33: Primefaces Nextgen Lju

Component Suite Demo

Page 34: Primefaces Nextgen Lju

TouchFaces

• Mobile UI Kit

• WebKit Browsers

• IPhone, Android, Palm

• Native IPhone UI

• Integrated Ajax

• Regular JSF

• Powered by jqTouch

Page 35: Primefaces Nextgen Lju

TouchFaces UI

• <i:application />

• <i:view />

• <i:tableView />

• <i:rowGroup />

• <i:rowItem />

• <i:switch />

Page 36: Primefaces Nextgen Lju

TouchFaces in Action

Translate Chat - Ajax Push PathFinder - GPS TwitFaces

Weather Notes News

Page 37: Primefaces Nextgen Lju

TouchFaces Demo

Page 38: Primefaces Nextgen Lju

Ajax Push/Comet

• Built on top of Atmosphere

• <p:push />

• CometContext.publish(...)

Page 39: Primefaces Nextgen Lju

Atmosphere Framework

• Portable Comet Framework

• Write Once, Deploy Anywhere

• Rest support

• Servlet 3.0 support

• JSF Integration: PrimeFaces

Page 40: Primefaces Nextgen Lju

Ajax Push/Comet

Page 41: Primefaces Nextgen Lju

Chat App in a Minutepublic class ChatController {

private String message;

public void send(ActionEvent event) {CometContext.publish(“chat”, message);

}//getters setters

}

<h:form><h:inputText value=”#{chatController.message}” /><p:commandButton value=”Send” actionListener=”#{chatController.send}” />

</h:form><p:outputPanel id=”display” />

<p:push channel=”chat” onpublish=”handlePublish” />

<script type=”text/javascript”>function handlePublish(pushed) {! $('#display').append(pushed.data);}</script>

Page 42: Primefaces Nextgen Lju

Pushing as JSON

Player player = new Player(); player.setName(“Messi”); player.setAge(22); CometContext.publish(player);

function handlePublish(pushed) {//pushed.data.name;//pushed.data.age;

}

Page 43: Primefaces Nextgen Lju

Extensions: FacesTrace

• Trace/Debug tool

• Lifecycle visualizer

• Performance Tracker

• Visual component tree

Page 44: Primefaces Nextgen Lju

FacesTrace Demo

Page 45: Primefaces Nextgen Lju

Integrate With

• Spring

• Spring Webflow

• Seam

• CDI

• Portlets

• See svn/examples

Page 46: Primefaces Nextgen Lju

Documentation

• User’s Guide - 350 pages

• Wiki

• Screencasts

• API & TLD Docs

• Third party articles/blogs

Page 47: Primefaces Nextgen Lju

Community Support

• http://primefaces.prime.com.tr/forum

Page 48: Primefaces Nextgen Lju

Enterprise Support

• 2/4 hour average response time

• Priority forum access

• Ticket based portal

• IM support over skype

• JSF specific help

• Special Case Support

Page 49: Primefaces Nextgen Lju

Community

• Strong community feedback

• 500 posts per week in forum

• Join us!

Page 50: Primefaces Nextgen Lju

Coming Soon

TreeTable

ProgressBar

ContextMenu

and more.......

Page 51: Primefaces Nextgen Lju

Finale

[email protected]

• Twitter: @cagataycivici, @primefaces

• Facebook Group: 206606616332

• Blog: http://cagataycivici.wordpress.com

• HomePage: http://www.primefaces.org

• Atmosphere: http://atmosphere.dev.java.net

Page 52: Primefaces Nextgen Lju

Questions