ankarajug kasım 2012 - primefaces

60
Çagatay Çivici

Upload: ankara-jug

Post on 06-May-2015

1.755 views

Category:

Documents


9 download

DESCRIPTION

PrimeFaces, JavaServer Faces icin gelistirllen ve dunya capinda populer olan zengin bir arayuz kutuphanesidir. Bu sunumda PrimeFaces Bilesenleri, Mobil, Ajax Push, Tema Destegi gibi modullerin yani sira PrimeFaces ekibinin gelistirdigi yeni jQuery javascript kutuphanesi PrimeUI'da tanitilmaktadir.

TRANSCRIPT

Page 1: AnkaraJUG Kasım 2012 - PrimeFaces

Çagatay Çivici

Page 2: AnkaraJUG Kasım 2012 - PrimeFaces

Çagatay Çivici

JSF Expert Group Member (JSR-314, JSR-344)

PrimeFaces Architect and Lead Developer

Apache MyFaces PMC

Speaker, Author, Reviewer

Co-Founder of Prime Teknoloji

Nickname: optimus.prime

Page 3: AnkaraJUG Kasım 2012 - PrimeFaces

Prime TeknolojiJava EE, OSS, Agile, Mobile, E-Commerce

Consulting

Training

Delivery

Offices in Istanbul and Ankara

34 Employees (Nov 2012)

www.prime.com.tr

Page 4: AnkaraJUG Kasım 2012 - PrimeFaces
Page 5: AnkaraJUG Kasım 2012 - PrimeFaces

4 years old

Page 6: AnkaraJUG Kasım 2012 - PrimeFaces

Lightweight

Page 7: AnkaraJUG Kasım 2012 - PrimeFaces

Easy to Use

Page 8: AnkaraJUG Kasım 2012 - PrimeFaces

Only 1 Jar1.7~ mb

Page 9: AnkaraJUG Kasım 2012 - PrimeFaces

No requireddependencies

Page 10: AnkaraJUG Kasım 2012 - PrimeFaces

Zero Config

Page 11: AnkaraJUG Kasım 2012 - PrimeFaces

Who Uses PrimeFaces?

Page 12: AnkaraJUG Kasım 2012 - PrimeFaces

PrimeFaces in the Wild

Page 13: AnkaraJUG Kasım 2012 - PrimeFaces

Most Popular

Page 14: AnkaraJUG Kasım 2012 - PrimeFaces

Global

Page 15: AnkaraJUG Kasım 2012 - PrimeFaces

100+ UI Components

Page 16: AnkaraJUG Kasım 2012 - PrimeFaces

Mock OS X

Page 17: AnkaraJUG Kasım 2012 - PrimeFaces

Form Components

Page 18: AnkaraJUG Kasım 2012 - PrimeFaces

Browser Support

Page 19: AnkaraJUG Kasım 2012 - PrimeFaces

Hide Complexity

Keep Flexibility<p:tabView onTabChange=”handleTabChange()”>

<p:ajax event=”change” listener=”#{bean.onTabChange}” update=”comp” />//tabs

</p:tabView>

CSSOverride

JSAPI

ClientCallbacks

AjaxCallbacks

CSS JS AJAX

Page 20: AnkaraJUG Kasım 2012 - PrimeFaces

Anatomy of a Component<p:schedule id=”sch” value=”#{bean.model}” editable=”true” />

<div id=”sch”></div>

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

</script>

You get:

JSF

Markup

Script

Page 21: AnkaraJUG Kasım 2012 - PrimeFaces

Accessibility

Keyboard/Mouse

ARIA Attributes

Page 22: AnkaraJUG Kasım 2012 - PrimeFaces

HTML5

canvas

data-*

websockets

forms media

Page 23: AnkaraJUG Kasım 2012 - PrimeFaces

Ajax in PrimeFaces

Server APIs: Standard JSF 2

Client APIs:

Page 24: AnkaraJUG Kasım 2012 - PrimeFaces

autoUpdate

p:ajax

RequestContext

Callbacks

AjaxStatus

Selectors

partialSubmit

Ajax Extensions

Page 25: AnkaraJUG Kasım 2012 - PrimeFaces

p:ajax f:ajaxoncomplete

onerroronstart

asyncglobal

onsuccess

oneventonerror

Page 26: AnkaraJUG Kasım 2012 - PrimeFaces

AjaxStatus<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=”dialog.show()” oncomplete=”dialog.hide()” />

<p:commandButton global=”true|false” />

Declarative

Programmatic

Global

Page 27: AnkaraJUG Kasım 2012 - PrimeFaces

RequestContext - Params<p:commandButton value=”Submit” action=”#{bean.save}”

oncomplete=”handleComplete(xhr, status, args)” />

public void save() {RequestContext rc = RequestContext.getCurrentInstance();rc.addCallbackParam(“person”, person);

}

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

alert(args.person.name);}

</script>

JSF Page

Bean

Callback

Page 28: AnkaraJUG Kasım 2012 - PrimeFaces

RequestContext - Scripts<p:commandButton value=”Submit” action=”#{bean.save}” />

<p:dialog widgetVar=”dialogWidget” ... />

public void save() {RequestContext rc = RequestContext.getCurrentInstance();rc.execute(“dialogWidget.hide()”);

}

JSF Page

Bean

Page 29: AnkaraJUG Kasım 2012 - PrimeFaces

RequestContext - Update<p:commandButton value=”Submit” action=”#{bean.save}” />

<h:outputText id=”val” value=”#{bean.property}” />

public void save() {RequestContext rc = RequestContext.getCurrentInstance();rc.addPartialUpdateTarget(“val”);

}

JSF Page

Bean

or<p:commandButton value=”Submit” action=”#{bean.save}”

update=”val” />

<h:outputText id=”val” value=”#{bean.property}” />

Page 30: AnkaraJUG Kasım 2012 - PrimeFaces

<p:commandButton value=”Submit” action=”#{bean.save}” />

<h:outputText id=”val” value=”#{bean.property}” />

public void save() {RequestContext rc = RequestContext.getCurrentInstance();rc.scrollTo(“val”);

}

Page

Bean

RequestContext - Scroll

Page 31: AnkaraJUG Kasım 2012 - PrimeFaces

AutoUpdate<p:growl id=”messages” />

<p:commandButton value=”Save” update=”messages” /> <p:commandButton value=”Update” update=”messages” /> <p:commandButton value=”Delete” update=”messages” />

<p:growl id=”messages” autoUpdate=”true”/> <p:commandButton value=”Save” /> <p:commandButton value=”Update” /> <p:commandButton value=”Delete” />

Page 32: AnkaraJUG Kasım 2012 - PrimeFaces

PartialSubmitPost

Data:javax.faces.partial.ajax=true&javax.faces.source=form%3Aj_idt18&javax.faces.partial.execute=form%3Aname&javax.faces.partial.render=form%3Adisplay&form%3Aj_idt18=form%3Aj_idt18&form=form&form%3Aname=&form%3Aj_idt20=&form%3Aj_idt22=&form%3Aj_idt24=&form%3Aj_idt26=&form%3Aj_idt28=&form%3Aj_idt30=&form%3Aj_idt32=&form%3Aj_idt34=&form%3Aj_idt36=&form%3Aj_idt38=&form%3Aj_idt40=&form%3Aj_idt42=&form%3Aj_idt44=&form%3Aj_idt46=&form%3Aj_idt48=&form%3Aj_idt50=&form%3Aj_idt52=&form%3Aj_idt66=&form%3Aj_idt68=&form%3Aj_idt70=&form%3Aj_idt72=&form%3Aj_idt74=&form%3Aj_idt76=&form%3Aj_idt78=&form%3Aj_idt80=&form%3Aj_idt82=&form%3Aj_idt84=&form%3Aj_idt86=&form%3Aj_idt88=&form%3Aj_idt90=&form%3Aj_idt92=&form%3Aj_idt94=&form%3Aj_idt96=&form%3Aj_idt98=&javax.faces.ViewState=7916482521909421983%3A-2156051337299048496

Post Data:javax.faces.partial.ajax=true&javax.faces.source=form%3Aj_idt18&javax.faces.partial.execute=form%3Aname&javax.faces.partial.render=form%3Adisplay&form%3Aj_idt18=form%3Aj_idt18&form=form&form%3Aname=&javax.faces.ViewState=7916482521909421983%3A-2156051337299048496

False True

Page 33: AnkaraJUG Kasım 2012 - PrimeFaces

update=”@(form)”

update=”@(form.first)”

update=”@(.mystyle)”

update=”@(.ui-datatable)”

update=”@(:input:not(select))”

update=”@(:input:disabled))”

PrimeFaces Selectors (PFS)

Page 34: AnkaraJUG Kasım 2012 - PrimeFaces

Optimizations

CompressMinify

On The Fly Loading

Merge

and

ResourceHandling

Page 35: AnkaraJUG Kasım 2012 - PrimeFaces

Demo

Page 36: AnkaraJUG Kasım 2012 - PrimeFaces

Themes

Page 37: AnkaraJUG Kasım 2012 - PrimeFaces

Twitter Bootstrap Theme

Page 38: AnkaraJUG Kasım 2012 - PrimeFaces

Install a Theme

Add primefaces-{themename}.jar

Configure<context-param>

<param-name>primefaces.THEME</param-name><param-value>{themename}</param-value>

</context-param>

Page 39: AnkaraJUG Kasım 2012 - PrimeFaces

Roll your own

Page 40: AnkaraJUG Kasım 2012 - PrimeFaces

Advanced Themes

Page 41: AnkaraJUG Kasım 2012 - PrimeFaces

Demo

Page 42: AnkaraJUG Kasım 2012 - PrimeFaces

PrimeFaces Mobile

Page 43: AnkaraJUG Kasım 2012 - PrimeFaces

<pm:page title="TwitFaces">

        <pm:view id="main" swatch="b">            <pm:header title="TwitFaces">            </pm:header>

            <pm:content>                <h:form id="twitForm">                    <h:outputText value="Account: " />                    <h:inputText value="#{twitterController.username}" />                    <p:separator />                    <p:commandButton value="Get Tweets" icon="refresh" update="tweetList"                                      actionListener="#{twitterController.loadTweets}" />

                    <p:dataList id="tweetList" value="#{twitterController.tweets}" var="tweet">                        #{tweet}                    </p:dataList>                </h:form>            </pm:content>        </pm:view>

    </pm:page>

PrimeFaces Mobile

Page 44: AnkaraJUG Kasım 2012 - PrimeFaces

powered by

PrimeFaces Mobile

Page 45: AnkaraJUG Kasım 2012 - PrimeFaces

Demo

Page 46: AnkaraJUG Kasım 2012 - PrimeFaces

PrimeFaces Push

Atmosphere

Page 47: AnkaraJUG Kasım 2012 - PrimeFaces

Demo

Page 48: AnkaraJUG Kasım 2012 - PrimeFaces

Javascript CSS

Rest, Jax-RS, Php, Spring MVC ...

Page 49: AnkaraJUG Kasım 2012 - PrimeFaces

Pure JavaScript<input id=”spinner” type=”text” />

<div id="default"> <ul>

<li><a href="#tab1">Tab 1</a></li><li><a href="#tab2">Tab 2</a></li><li><a href="#tab3">Tab 3</a></li>

</ul><div>

<div id="tab1">content 1

</div><div id="tab2">

content 2</div><div id="tab3">

content 3</div>

</div></div>

$(‘#spinner’).puispinner();

$(‘#default’).puitabview();

$(‘#default’).puitabview({orientation: ‘left’

});

Page 50: AnkaraJUG Kasım 2012 - PrimeFaces

Demo

Page 51: AnkaraJUG Kasım 2012 - PrimeFaces

Portlets

Sample: /svn/examples/trunk/prime-portlet

via

Page 53: AnkaraJUG Kasım 2012 - PrimeFaces

Documentation

500+ Pages

Page 54: AnkaraJUG Kasım 2012 - PrimeFaces
Page 55: AnkaraJUG Kasım 2012 - PrimeFaces

Community

3000 posts / month

Page 56: AnkaraJUG Kasım 2012 - PrimeFaces

Bundled with NetBeans 7.x

Page 57: AnkaraJUG Kasım 2012 - PrimeFaces

PrimeFaces PRO

TrainingSupport Consulting

Page 58: AnkaraJUG Kasım 2012 - PrimeFaces

Scaffholding

Page 59: AnkaraJUG Kasım 2012 - PrimeFaces

RoadMap

Current 3.4.2

Next Major 3.5

Maintenance 3.4.x

Mobile 1.0

PrimeUI JS Library

PrimeFaces for ASP.NET

Page 60: AnkaraJUG Kasım 2012 - PrimeFaces

Q/[email protected]

@primefaces

groups/primefaces

http://blog.primefaces.org