290 likes | 472 Views
Java Server Faces. Çağatay Çivici Apache MyFaces Team Member cagatay@apache.org. Çağatay Çivici. Apache MyFaces Project Committer OpenLogic Expert Group Member Sourceforge jsf-comp project developer JSF Client Side Validators Acegi Security Framework’s JSF Components
E N D
Java Server Faces Çağatay Çivici Apache MyFaces Team Member cagatay@apache.org
Çağatay Çivici • Apache MyFaces Project Committer • OpenLogic Expert Group Member • Sourceforge jsf-comp project developer • JSF Client Side Validators • Acegi Security Framework’s JSF Components • JFreeChart for JSF : JSF Chart Creator • FacesTrace: Visual Debugger of JSF
Agenda • What is JSF? • JSF Component Model and Binding mechanism • JSF Request Lifecycle • IOC and Managed Beans • Navigations • Internalization and Resource Bundles • Extending JSF • Integration with Other Frameworks (Spring Framework Example) • Ajax with JSF • Facelets • Apache MyFaces • IDE Support • Future of JSF • Questions
What is JSF? • a component oriented and event driven web framework to build up web applications. • a Standard • various implementations • Sun Reference Implementation • Apache MyFaces • Oracle ADF • IBM
Similar Concepts • Asp.net • Tapestry • Wicket • Swing
JSF vs Struts • Struts is an action framework • Controller of the MVC pattern • JSF is an event driven and component oriented framework. • JSF contains all the members of the MVC. • Model : Managed Beans • View : Components • Controller : Faces Servlet
JSF Component Model • Covers a wide range components. • Reusable • Customizable • State aware • Easy to plug in third party components. • Easy to create custom components of your own. • Renderers brings abstraction
Simple Example: HtmlInputText • Declared as; • <h:inputText id=“id1” value=“xxx” /> • Gives the output • <input type=“text” id=“parentformid:id1” value=“xxx” /> • Customization attributes like; • Styleclass • Javascript events (onmousover etc...)
Binding makes JSF powerful • Value binding; binds a bean’s variable to a component. • <h:inputText value=“#{person.name}” /> • Action binding, binds a method to an action component. • <h:commandButton action=“{personSavePage.savePerson}” />
JSF Component Tree • Components are represented using a tree. • <f:view> <h:form id=“form1”> <h:outputText id=“lbl_name” value=“Name”> <h:inputText id=“txt_name” value=“NameValue”> </h:form> </f:view>
Event Handling • Events are created based on the request parameters. • Each event is broadcasted to the related listeners.
State Management • JSF saves and restores the state of the components in each faces request. • Client • As a hidden variable • Server • As a session entry
Conversion and Validation • Submitted form values are strings • Conversion takes place to convert these values to java objects • Validation mechanism validates these converted objects • Built-in converters and validators • Easy to write custom converters and validators
IOC and Managed Beans • JSF uses it’s own container to manage the beans in it’s context. • <managed-bean> <managed-bean-name>pc_Index</managed-bean-name> <managed-bean-class>demo.Index</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> <managed-property> <property-name>someVariable</property-name> <value>#{pc_DB}</value> </managed-property> </managed-bean> <managed-bean> <managed-bean-name>pc_DB</managed-bean-name> <managed-bean-class>demo.Db</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean>
Navigations • <navigation-rule> <from-view-id>/login.jsp</from-view-id> <navigation-case> <from-outcome>success</from-outcome> <to-view-id>/mainmenu.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>failure</from-outcome> <to-view-id>/login.jsp</to-view-id> </navigation-case> </navigation-rule> • Action specific • <from-action>#{loginBean.loginAction}</from-action> • Supports patterns • <from-view-id>*</from-view-id>
Extending JSF • Navigation Handler • View Handler • Custom Resolvers • Phaselisteners • Custom Components
Multilanguage • Support for resource bundles • <application> <locale-config> <default-locale>tr</default-locale> <supported-locale>en</supported-locale> <supported-locale>en_US</supported-locale> <supported-locale>de</supported-locale> </locale-config> <message-bundle>jsfsunum.messages </message-bundle> </application> • jsfsunum/messages.tr • msg_welcome = Merhaba • Bundles on faces pages • <f:loadBundle basename=“jsfsunum.labels" var="msg"/>
Integration with Spring • JSF-Spring • Using a delegating variable resolver • <application> <variable-resolver> org.springframework.web.jsf.DelegatingVariableResolver </variable-resolver>; </application> <managed-bean> <managed-bean-name>backingBeanName</managed-bean-name> <managed-bean-class> yourpackagename.backingBeanClass </managed-bean-class> <managed-bean-scope>request</managed-bean-scope> <managed-property> <property-name>facadeService</property-name> <property-class> packagename.FacadeService </property-class> <value>#{facadeService}</value> </managed-property> </managed-bean>
Ajax with JSF • Components with ajax support • JSF ajax frameworks • JSF Avatar • Ajax Anywhere • Ajax4jsf • IceFaces • Ajax enabled myFaces components
Facelets • Replacing jsp markup with xhtml • Templating • Composite components • Powerful view handler than jsf 1.1 • No need for tag handlers of jsp
JSF IDE Support • Exadel Studio • IBM RSA • Oracle JDeveloper • Sun Studio Creator • MyEclipse • Bea Workshop • Macromedia jsftoolbox • Netbeans
Introducing Apache MyFaces • Open source implementation of JSF • Contains extended tomahawk library • Oracle ADF donation
MyFaces Component Demo • Basic form components • Datatable • File upload • Date and Calendar • Jscookmenu • Schedule • Accordion panel • Tabbed Panel • Ajax components • Tree • Dojo Toolkit • Fisheye • Html Editor • Chart Creator (jsf-comp component)
Future • JSF 1.2 and later JSF 2.0 • More powerful IDE support • More components • Integrated Ajax Support
The End - Questions? • cagatay.civici@gmail.com • www.jroller.com/page/cagataycivici