java web programming [8/9] : jsf and ajax

35
Module 8: JSF and AJAX Basics Thanisa Kruawaisayawan Thanachart Numnonda www.imcinstitute.com

Upload: imc-institute

Post on 25-May-2015

641 views

Category:

Technology


0 download

DESCRIPTION

Presentation for Java Web Programming Course; 2011

TRANSCRIPT

Page 1: Java Web Programming [8/9] : JSF and AJAX

Module 8: JSF and AJAX Basics

Thanisa Kruawaisayawan

Thanachart Numnonda

www.imcinstitute.com

Page 2: Java Web Programming [8/9] : JSF and AJAX

2

Objectives

What is JSF?

Real-Life Examples of AJAX Apps What is AJAX and Why AJAX? Technologies Used In AJAX XMLHttpRequest

Page 3: Java Web Programming [8/9] : JSF and AJAX

JavaServer™ Faces (JSF) Framework Is…

A server side user interface (UI) component framework for Java™ technology-based web applications. (Validators)

Drag-and-drop UI components to build a web Application.

Page 4: Java Web Programming [8/9] : JSF and AJAX

Application Configuration File

XML file for configuring resources required at application startup time navigation rules, converters, validators, render kits

Usually named as faces-config.xml A <faces-config> tag must enclose all of the other

declarations<faces-config>

....

</faces-config>

Page 5: Java Web Programming [8/9] : JSF and AJAX

Two Tag Libraries

jsf_core Defines other JSF related tags Independent of any rendering technology

html_basic Defines tags for representing common HTML user

interface components

JSP page need to declare them<%@ taglib uri="http://java.sun.com/jsf/core/" prefix="f" %>

<%@ taglib uri="http://java.sun.com/jsf/html/" prefix="h" %>

Page 6: Java Web Programming [8/9] : JSF and AJAX

<f:view> element

Represents UIViewRoot component All component tags on the page must be

enclosed in the view tag<f:view>

... other faces tags, possibly mixed with other content ...

</f:view>

Optional locale attributeOverrides the Locale stored in the UIViewRoot

Page 7: Java Web Programming [8/9] : JSF and AJAX

HTML Tags

Used to control display data or accept data from the user

Common attributes id: uniquely identifies the component value: identifies an external data source mapped

to the component's value binding: identifies a bean property mapped to

the component instance

Page 8: Java Web Programming [8/9] : JSF and AJAX

Built-in UI Component Classes

UIForm: Encapsulates a group of controls that submit

data to the application. This component is analogous to the form tag in HTML.

UIInput: Takes data input from a user is a subclass of UIOutput

UIOutput: Displays data output on a page

Page 9: Java Web Programming [8/9] : JSF and AJAX

UIForm & <h:form> tag

UIForm UI componentAn input form with child components

representing data that is either presented to the user or submitted with the form

Encloses all of the controls that display or collect data from the user

Include HTML markup to layout the controls on the page <h:form> tag itself does not perform any layout

Page 10: Java Web Programming [8/9] : JSF and AJAX

UIInput & UIOutput Components

UIInput component displays a value to a user and allows the user to modify this data The most common example is a text field

UIOutput component displays data that cannot be modified The most common example is a label

Conversions can occur Both UIInput and UIOutput components can be

rendered in several different ways

Page 11: Java Web Programming [8/9] : JSF and AJAX

UICommand & <h:commandButton>

UICommand component performs an action when it is activatedMost common renderers are Button and Link

Page 12: Java Web Programming [8/9] : JSF and AJAX

UICommand & <h:commandButton>

Additional attributes action:

is either a logical outcome String or a JSF EL expression that points to a bean method that returns a logical outcome String

In either case, the logical outcome String is used by the navigation system to determine what page to access when the UICommand component is activated

Page 13: Java Web Programming [8/9] : JSF and AJAX

Example1: <h:commandButton> from carDetail.jsp

<h:commandButton action="#{carstore.buyCurrentCar}"

value="#{bundle.buy}" /> action attribute

references a method on the CarStore backing bean that performs some processing and returns an outcome

outcome is passed to the default NavigationHandler, which matches the outcome against a set of navigation rules defined in the application configuration file.

value attribute

references the localized message for the button's label bundle part of the expression refers to the ResourceBundle

that contains a set of localized messages

Page 14: Java Web Programming [8/9] : JSF and AJAX

greeting.jsp <f:view>

<h:form id="helloForm" >

<h2>Hi. My name is Duke. I'm thinking of a number from

<h:outputText value="#{UserNumberBean.minimum}"/> to

<h:outputText value="#{UserNumberBean.maximum}"/>. Can you guess it?

</h2>

<h:graphic_image id="waveImg" url="/wave.med.gif" />

<h:inputText id="userNo" value="#{UserNumberBean.userNumber}“ />

<h:commandButton id="submit" action="success" value="Submit" />

<p>

<h:messages style="color: red; font-family: 'New Century Schoolbook', serif;

font-style: oblique; text-decoration: overline" id="errors1" for="userNo"/>

</h:form>

</f:view>

</HTML>

Page 15: Java Web Programming [8/9] : JSF and AJAX

Validation Model

jsf-core tag library also defines a set of tags that correspond to the standard Validator implementations

Most of the tags have a set of attributes for configuring the validator's propertiesminimum and maximum

Page 16: Java Web Programming [8/9] : JSF and AJAX

Validator Tags

<f:validator> Registers a custom Validator on a component

<f:validateLength> Registers a LengthValidator on a component

<f:validateLongRange> Registers a LongRangeValidator on a component

<f:validateDoubleRange> Registers a DoubleRangeValidator on a component

Page 17: Java Web Programming [8/9] : JSF and AJAX

17

Real-Life Examples of AJAX Apps Google maps

http://maps.google.com/

Google Suggest http://www.google.com/webhp?complete=1&hl=en

Gmail http://gmail.com/

Yahoo Maps (new) http://maps.yahoo.com/

Many more are popping everywhere

Page 18: Java Web Programming [8/9] : JSF and AJAX

18

What is AJAX?

Asynchronous JavaScript And XML DHTML plus Asynchronous communication

capability through XMLHttpRequest Pros

Most viable RIA technology so far Tremendous industry momentum Several toolkits and frameworks are emerging No need to download code & no plug-in required

Cons Still browser incompatibility JavaScript is hard to maintain and debug

Page 19: Java Web Programming [8/9] : JSF and AJAX

19

Why AJAX? Intuitive and natural user interaction

No clicking required Mouse movement is a sufficient event trigger

"Partial screen update" replaces the "click, wait, and refresh" user interaction model Only user interface elements that contain new information

are updated (fast response) The rest of the user interface remains displayed without

interruption (no loss of operational context) Asynchronous communication replaces "synchronous

request/response model."

Page 20: Java Web Programming [8/9] : JSF and AJAX

20

Uninterrupteduser operationwhile data is being fetched

Interrupted useroperation whilethe data is beingfetched

Page 21: Java Web Programming [8/9] : JSF and AJAX

21

Page 22: Java Web Programming [8/9] : JSF and AJAX

22

Server-Side AJAX Request Processing

Server programming model remains the same It receives standard HTTP GETs/POSTsCan use Servlet, JSP, JSF, ...

With minor constraintsMore frequent and finer-grained requests from

clientResponse content type can be

text/xml text/plain text/json text/javascript

Page 23: Java Web Programming [8/9] : JSF and AJAX

23

Demo Scenario

Run sample AJAX applications within NetBeans IDEAuto completionData validationProgress bar

You can try this demo yourself These applications are provided as built-in sample

applications in NetBeans

Page 24: Java Web Programming [8/9] : JSF and AJAX

24

Data Validation Example

Page 25: Java Web Programming [8/9] : JSF and AJAX

25

Steps of AJAX Operation 1. A client event occurs2. An XMLHttpRequest object is created3. The XMLHttpRequest object is configured4. The XMLHttpRequest object makes an async.

request5. The ValidateServlet returns an XML document

containing the result6. The XMLHttpRequest object calls the callback()

function and processes the result7. The HTML DOM is updated

Page 26: Java Web Programming [8/9] : JSF and AJAX

26

1. A Client event occurs

A JavaScript function is called as the result of an event

Example: validateUserId() JavaScript function is mapped as a event handler to a onkeyup event on input form field whose id is set to “userid”<input type="text" size="20" id="userid" name="id"

onkeyup="validateUserId();">

Page 27: Java Web Programming [8/9] : JSF and AJAX

27

2. An XMLHttpRequest object is created var req;function initRequest() { if (window.XMLHttpRequest) { req = new XMLHttpRequest(); } else if (window.ActiveXObject) { isIE = true; req = new ActiveXObject("Microsoft.XMLHTTP"); }}function validateUserId() { initRequest(); req.onreadystatechange = processRequest; if (!target) target = document.getElementById("userid"); var url = "validate?id=" + escape(target.value); req.open("GET", url, true); req.send(null); }

Page 28: Java Web Programming [8/9] : JSF and AJAX

28

3. An XMLHttpRequest object is configured with a callback function

var req;function initRequest() { if (window.XMLHttpRequest) { req = new XMLHttpRequest(); } else if (window.ActiveXObject) { isIE = true; req = new ActiveXObject("Microsoft.XMLHTTP"); }}function validateUserId() { initRequest(); req.onreadystatechange = processRequest; // callback function if (!target) target = document.getElementById("userid"); var url = "validate?id=" + escape(target.value); req.open("GET", url, true); req.send(null); }

Page 29: Java Web Programming [8/9] : JSF and AJAX

29

4. XMLHttpRequest object makes an async. request

function initRequest() { if (window.XMLHttpRequest) { req = new XMLHttpRequest(); } else if (window.ActiveXObject) { isIE = true; req = new ActiveXObject("Microsoft.XMLHTTP"); }}function validateUserId() { initRequest(); req.onreadystatechange = processRequest; if (!target) target = document.getElementById("userid"); var url = "validate?id=" + escape(target.value); req.open("GET", url, true); req.send(null); } URL is set to validate?id=greg

Page 30: Java Web Programming [8/9] : JSF and AJAX

30

5. The ValidateServlet returns an XML document containing the results (Server)

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String targetId = request.getParameter("id");

if ((targetId != null) && !accounts.containsKey(targetId.trim())) { response.setContentType("text/xml"); response.setHeader("Cache-Control", "no-cache"); response.getWriter().write("<valid>true</valid>"); } else { response.setContentType("text/xml"); response.setHeader("Cache-Control", "no-cache"); response.getWriter().write("<valid>false</valid>"); } }

Page 31: Java Web Programming [8/9] : JSF and AJAX

31

6. XMLHttpRequest object calls callback() function and processes the result

The XMLHttpRequest object was configured to call the processRequest() function when there is a state change to the readyState of the XMLHttpRequest object

function processRequest() { if (req.readyState == 4) { if (req.status == 200) { var message = ...; ...

Page 32: Java Web Programming [8/9] : JSF and AJAX

32

7. The HTML DOM is updated

JavaScript technology gets a reference to any element in a page using DOM API

The recommended way to gain a reference to an element is to call document.getElementById("userIdMessage"), where

"userIdMessage" is the ID attribute of an element appearing in the HTML document

JavaScript technology may now be used to modify the element's attributes; modify the element's style properties; or add, remove, or modify child elements

Page 33: Java Web Programming [8/9] : JSF and AJAX

33

1. <script type="text/javascript">2. function setMessageUsingDOM(message) {3. var userMessageElement = document.getElementById("userIdMessage");4. var messageText;5. if (message == "false") {6. userMessageElement.style.color = "red";7. messageText = "Invalid User Id";8. } else {9. userMessageElement.style.color = "green";10. messageText = "Valid User Id";11. }12. var messageBody = document.createTextNode(messageText);13. // if the messageBody element has been created simple replace it otherwise14. // append the new element15. if (userMessageElement.childNodes[0]) {16. userMessageElement.replaceChild(messageBody,17. userMessageElement.childNodes[0]);18. } else {19. userMessageElement.appendChild(messageBody);20. }21. }22. </script>23. <body>24. <div id="userIdMessage"></div>25. </body>

Page 34: Java Web Programming [8/9] : JSF and AJAX

34

Acknowledgement

Most contents are borrowed from the presentation slides of Sang Shin, Java™ Technology Evangelist, Sun Microsystems, Inc.

Page 35: Java Web Programming [8/9] : JSF and AJAX

35

Thank you

[email protected]

www.facebook.com/imcinstitute

www.imcinstitute.com