06-event-handlingadvansed

27
© 2009 Marty Hall JSF: Handling Events Originals of Slides and Source Code for Examples: Originals of Slides and Source Code for Examples: http://www.coreservlets.com/JSF-Tutorial/ Customized Java EE Training: http://courses.coreservlets.com/ Servlets, JSP, JSF 1.x & JSF 2.0, Struts Classic & Struts 2, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6. Developed and taught by well-known author and developer. At public venues or onsite at your location. © 2009 Marty Hall For live training on JSF 1.x or 2.0, please see t htt // lt / courses at http://courses.coreservlets.com/. Taught by the author of Core Servlets and JSP, More Servlets and JSP and this tutorial Available at public Servlets and JSP, and this tutorial. Available at public venues, or customized versions can be held on-site at your organization. Customized Java EE Training: http://courses.coreservlets.com/ Servlets, JSP, JSF 1.x & JSF 2.0, Struts Classic & Struts 2, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6. Developed and taught by well-known author and developer. At public venues or onsite at your location. Courses developed and taught by Marty Hall Java 5, Java 6, intermediate/beginning servlets/JSP, advanced servlets/JSP, Struts, JSF, Ajax, GWT, custom courses. Courses developed and taught by coreservlets.com experts (edited by Marty) Spring, Hibernate/JPA, EJB3, Ruby/Rails Contact hall@coreservlets.com for details

Upload: arjun-shanka

Post on 20-May-2015

208 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 06-Event-Handlingadvansed

© 2009 Marty Hall

JSF: Handling EventsOriginals of Slides and Source Code for Examples:Originals of Slides and Source Code for Examples:

http://www.coreservlets.com/JSF-Tutorial/

Customized Java EE Training: http://courses.coreservlets.com/Servlets, JSP, JSF 1.x & JSF 2.0, Struts Classic & Struts 2, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6.

Developed and taught by well-known author and developer. At public venues or onsite at your location.

© 2009 Marty Hall

For live training on JSF 1.x or 2.0, please see t htt // l t /courses at http://courses.coreservlets.com/.

Taught by the author of Core Servlets and JSP, More Servlets and JSP and this tutorial Available at public Servlets and JSP, and this tutorial. Available at public venues, or customized versions can be held on-site

at your organization.

Customized Java EE Training: http://courses.coreservlets.com/Servlets, JSP, JSF 1.x & JSF 2.0, Struts Classic & Struts 2, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6.

Developed and taught by well-known author and developer. At public venues or onsite at your location.

• Courses developed and taught by Marty Hall– Java 5, Java 6, intermediate/beginning servlets/JSP, advanced servlets/JSP, Struts, JSF, Ajax, GWT, custom courses.

• Courses developed and taught by coreservlets.com experts (edited by Marty)– Spring, Hibernate/JPA, EJB3, Ruby/Rails

Contact [email protected] for details

Page 2: 06-Event-Handlingadvansed

Topics in This Section

• Comparing action controllers to event lilisteners

• Action listenersV l h li t• Value change listeners

• Using JavaScript to submit formB i tibiliti– Browser incompatibilities

• Combining action listeners and action controllers in the same GUI elementcontrollers in the same GUI element

5

Motivation

• There are two varieties of user interface events– Events that start back-end processing

Events that affect only the format of the user interface– Events that affect only the format of the user interface• JSF categorizes code that handles these as

action controllers and event listeners– Action controllers handle main form submission

• Fire after bean has been populated (see previous section)• Fire after validation logic (see upcoming section)• Fire after validation logic (see upcoming section)• Return strings that directly affect page navigation

– Event listeners handle UI eventsOft fi b f b h b l t d• Often fire before bean has been populated

• Often bypass validation logic• Never directly affect page navigation

6

Page 3: 06-Event-Handlingadvansed

Event Handlers vs. Ajax

• Event handlers are one of the most i f f JSFconvenient features of JSF

– Especially compared to Struts or regular MVC

However Ajax is often even better• However, Ajax is often even better– Many situations where event handlers apply result in only

a small number of elements changingg g– In that case, Ajax yields a more interactive user

experienceAlth h it f il i ld b d if J S i t i• Although it fails in older browsers and if JavaScript is disabled

– See later lecture on Ajax4jsf

7

JSF Flow of Control (Updated)

faces-config.xml- beans declared in managed-bean section

mapping of return conditions Blah.jsp(Runs bean getter methods)

- mapping of return conditions declared in navigation-rule section

Do Side

Redisplay form

submit formPOST t Bl h f

Instantiate return diti

ChooseRun Action forward result1.jsp

BusinessLogic

resultsButton or other control

referred to event listener

Do SideEffect

POST request Blah.faces Bean condition JSPController Method result2.jsp...resultN.jsp(Use h:outputTextto display bean

i )

Run SetterMethods

Store results of businesslogic in bean

Button referred to action controller

properties)

8

Page 4: 06-Event-Handlingadvansed

Types of Event Listeners

• ActionListener– Fired by submit buttons, image maps, and hypertext links

with attached JavaScript• <h:commandButton value="..." .../>• <h:commandButton image="..." .../>• <h:commandLink .../>

– Automatically submit the formAutomatically submit the form• ValueChangeListener

– Fired by combo boxes, checkboxes, radio buttons, fi ld d htextfields, and others

• <h:selectOneMenu .../>• <h:selectBooleanCheckbox.../>• <h:selectOneRadio .../>• <h:inputText .../>

– Do not automatically submit the form9

© 2009 Marty Hall

Action Listeners

Customized Java EE Training: http://courses.coreservlets.com/Servlets, JSP, JSF 1.x & JSF 2.0, Struts Classic & Struts 2, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6.

Developed and taught by well-known author and developer. At public venues or onsite at your location.

Page 5: 06-Event-Handlingadvansed

Using ActionListener in JSF

• Some buttons submit the form and start b k d ibackend processing– Use <h:commandButton action="..." ...>

Other buttons affect only the UI• Other buttons affect only the UI– Use <h:commandButton actionListener="..." .../>– You usually want this process to occur before beans areYou usually want this process to occur before beans are

populated and especially before validation occurs• Since forms are often incomplete when the UI is adjusted

U "i di t " t d i t th t li t fi b f– Use "immediate" to designate that listener fires before beans are populated or validation is performed

<h:commandButton actionListener="..."immediate="true" .../>

11

Implementing ActionListener in the Java CodeJava Code

• Listener is usually in the form bean classb i l if C– But can be in separate class if you use FacesContext to

get the request or session object and look up the form bean explicitly

• Takes an ActionEvent as an argument– Void return type (not String as in action controllers)

ActionEvent is in javax faces event– ActionEvent is in javax.faces.event– ActionEvent has a getComponent method that lets you

obtain the UIComponent referenceF th UIC t t th t ID• From the UIComponent, you can get the component ID, renderer, and other low-level information

– Sample codepublic void someMethod(ActionEvent event) {

doSomeSideEffects();}

12

Page 6: 06-Event-Handlingadvansed

Example: Letting the User Disable Certain UI ControlsCertain UI Controls

• Every UI control has a “disabled” property h i f l b d f lthat is false by default

• Use button with attached ActionListener to disable or reenable certain controlsdisable or reenable certain controls

• Specific exampleCollect name and job title to display a sample resume– Collect name and job title to display a sample resume

– Create comboboxes that let user select foreground and background colors<h:selectOneMenu value="..." disabled="..." ...><f:selectItems value="..."/>

</h:selectOneMenu>

• Value for f:selectItems should be a SelectItem array• Value for f:selectItems should be a SelectItem array

– Have button that disables or reenables the comboboxes13

Steps in Using JSF

1) Create a beanA) Properties for form dataA) Properties for form dataB) Action controller and event listener methodsC) Placeholders for results data

2) Create an input form2) Create an input formA) Input fields refer to bean propertiesB) Button specifies action controller method that will return conditionC) Button or other GUI control specifies event listener methodC) Button or other GUI control specifies event listener method

3) Edit faces-config.xmlA) Declare the beanB) S if i ti lB) Specify navigation rules

4) Create results pages– Output form data and results data with h:outputText

5) P di JSP5) Prevent direct access to JSP pages– Use a filter that redirects blah.jsp to blah.faces

14

Page 7: 06-Event-Handlingadvansed

Step 1: Create Bean

• (A) Properties for form datapackage coreservlets;p g ;import javax.faces.model.*;import javax.faces.event.*;

public class ResumeBean implements Serializable {...private String fgColor = "BLACK";private String bgColor = "WHITE";private SelectItem[] availableColorNames ={ new SelectItem("BLACK"),{ new SelectItem( BLACK ),new SelectItem("WHITE"),new SelectItem("SILVER"),new SelectItem("RED"),new SelectItem("GREEN"),

S l tIt ("BLUE") }new SelectItem("BLUE") };

public String getFgColor() { return(fgColor); }

public void setFgColor(String fgColor) {public void setFgColor(String fgColor) {this.fgColor = fgColor;

} ...

public SelectItem[] getAvailableColors() {...}15

Step 1: Create Bean

• (A) Properties for form data

...private String name = "";private String jobTitle = "";...public String getName() { return(name); }

public void setName(String name) {public void setName(String name) {this.name = name;

}

bli St i tJ bTitl () { t (j bTitl ) }public String getJobTitle() { return(jobTitle); }

public void setJobTitle(String jobTitle) {this.jobTitle = jobTitle;j j ;

}

16

Page 8: 06-Event-Handlingadvansed

Step 1: Create Bean

• (B) Event listener and action controller methods

public boolean isColorSupported() { return(isColorSupported);

}}

public void toggleColorSupport(ActionEvent event) {isColorSupported = !isColorSupported;isColorSupported = !isColorSupported;

}

public String showPreview() {

Action listener

Action controller

if (isColorSupported && fgColor.equals(bgColor)) {return("same-color");

} else {ret rn("s ccess")return("success");

}}

17

Step 2: Create Input Form

• New features– Use h:selectOneMenu to create combobox– Use f:selectItems to populate list

Use h:commandButton– Use h:commandButton • With actionListener and immediate

– Designates event listener code to fire when button clicked

– Change the label (value) of the button depending on what the button will do

• In this case, button is a toggleIn this case, button is a toggle

• Example code<h:commandButton

l "#{ B b tt L b l}"value="#{someBean.buttonLabel}" actionListener="#{someBean.doSideEffect}"immediate="true"/>

18

Page 9: 06-Event-Handlingadvansed

Step 2: Create Input Form

• (A) Input fields<h:form><h:form>...Foreground color: <h:selectOneMenu value="#{resumeBean.fgColor}"

di bl d "#{! B l S t d}">disabled="#{!resumeBean.colorSupported}"><f:selectItems value="#{resumeBean.availableColors}"/>

</h:selectOneMenu><BR>Background color: <h:selectOneMenu value="#{resumeBean.bgColor}"

disabled="#{!resumeBean.colorSupported}"><f:selectItems value="#{resumeBean.availableColors}"/>#{ } /

</h:selectOneMenu><BR>...Name: <h:inputText value="#{resumeBean name}"/><BR><h:inputText value= #{resumeBean.name} /><BR>Job Title: <h:inputText value="#{resumeBean.jobTitle}"/><P>

</h:form>19

Step 2: Create Input Form

• (B) Action controller– Even when you have event listeners, you almost always

have action controllers• As before these invoke business logic and participate inAs before, these invoke business logic and participate in

navigation flow (via navigation-rule entries in config file)• Setter methods and validation fire before action controller

<h:form>...<h dB tt l "Sh P i "<h:commandButton value="Show Preview"

action="#{resumeBean.showPreview}"/></h:form>

20

Page 10: 06-Event-Handlingadvansed

Step 2: Create Input Form

• (C) Event listener– Event listeners perform side effects, and then form is

redisplayed• They do not usually invoke normal business logic setterThey do not usually invoke normal business logic, setter

methods are not usually fired, and they never participate in navigation flow (navigation-rule entries do not apply)

• You usually use "immediate" to say that setter methods doYou usually use immediate to say that setter methods do not fire

<h:form>...<h:commandButton

value="#{resumeBean.colorSupportLabel}" actionListener="#{resumeBean.toggleColorSupport}"immediate="true"/>

</h:form>21

Steps 2-4: Initial Result

• File is tomcat_dir/webapps/jobs/customize.jspURL i h //l lh /j b / i f• URL is http://localhost/jobs/customize.faces

22

Page 11: 06-Event-Handlingadvansed

Step 2: Result of Clicking Button (Independent of Action Controller)(Independent of Action Controller)

23

Step 3: Edit faces-config.xml

• (A) Declaring bean– Note session scope so changes persist

…<faces-config>g

<managed-bean><managed-bean-name>resumeBean</managed-bean-name><managed-bean-class>

coreservlets.ResumeBean</managed-bean-class><managed-bean-scope>session</managed-bean-scope>

</managed-bean>…</faces-config>

24

Page 12: 06-Event-Handlingadvansed

Step 3: Edit faces-config.xml

• (B) Specifying navigation rules

…<faces-config>g

…<navigation-rule>

<from-view-id>/customize.jsp</from-view-id>< i ti ><navigation-case>

<from-outcome>same-color</from-outcome><to-view-id>/WEB-INF/results/same-color.jsp</to-view-id>

</navigation-case><navigation-case>

<from-outcome>success</from-outcome><to-view-id>/WEB-INF/results/show-preview.jsp</to-view-id>

</navigation-case></navigation case></navigation-rule>

</faces-config>

25

Step 4: Create Results Pages

• WEB-INF/results/same-color.jspR lt l t ti t ll t t li t– Results pages apply to action controller, not event listener

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %><%@ taglib uri="http://java sun com/jsf/html" prefix="h" %><%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %><f:view><!DOCTYPE …><HTML>…You chose"<h:outputText value="#{resumeBean.fgColor}"/>"as both the foreground and background color. g g<P>You don't deserve to get a job, but I suppose we will let you <A HREF="customize.faces">try again</A>.…</HTML></f:view>

26

Page 13: 06-Event-Handlingadvansed

Step 4: Create Results Pages

• WEB-INF/results/show-preview.jsp// / /<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %><f:view><!DOCTYPE …><HTML>…<BODY TEXT="<h:outputText value="#{resumeBean.fgColor}"/>"

BGCOLOR="<h:outputText value="#{resumeBean.bgColor}"/>">GCO O :output e t a ue #{ esu e ea .bgCo o } /<H1 ALIGN="CENTER"><h:outputText value="#{resumeBean.name}"/><BR><SMALL><h:outputText value="#{resumeBean.jobTitle}"/></SMALL></H1></SMALL></H1>Experienced <h:outputText value="#{resumeBean.jobTitle}"/>seeks challenging position doing something.<H2>Employment History</H2>Bl h bl h bl h bl h Y dd dd dd ddBlah, blah, blah, blah. Yadda, yadda, yadda, yadda.…</HTML></f:view>27

Step 4: Example Result for Same ColorsSame Colors

28

Page 14: 06-Event-Handlingadvansed

Step 4: Example Result for Different ColorsDifferent Colors

29

Step 5: Prevent Direct Access to JSP Pagesto JSP Pages

• Use filter that captures url-pattern *.jsp– No changes from previous examples

30

Page 15: 06-Event-Handlingadvansed

© 2009 Marty Hall

Value Change Listeners

Customized Java EE Training: http://courses.coreservlets.com/Servlets, JSP, JSF 1.x & JSF 2.0, Struts Classic & Struts 2, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6.

Developed and taught by well-known author and developer. At public venues or onsite at your location.

Using ValueChangeListener in JSP

• ActionListener was attached to buttonF t ti ll b itt d h li k d– Form was automatically submitted when clicked

• ValueChangeListener is attached to combobox, listbox, radio button, checkbox, , , , ,textfield, etc.– Form not automatically submitted– Need to add JavaScript to submit the form– Need to add JavaScript to submit the form

onclick="submit()" or onchange="submit()"– Event incompatibility between Firefox and IE

• Firefox Netscape and Opera fire the onchange eventsFirefox, Netscape, and Opera fire the onchange events when the combobox selection changes, radio button is selected, or checkbox is checked/unchecked

• Internet Explorer fires event after selection changes, but l h th GUI t l i th i t fonly when another GUI control receives the input focus

– Older IE versions behave differently! Test on multiple browsers!

32

Page 16: 06-Event-Handlingadvansed

Implementing ValueChangeListener in Java Codein Java Code

• Listener is usually in the form bean class– As discussed previously

• Takes a ValueChangeEvent as an argumentUseful ValueChangeEvent methods– Useful ValueChangeEvent methods

• getComponent (as mentioned for ActionEvent)• getOldValue (previous value of GUI element)

tN V l ( t l f GUI l t)• getNewValue (current value of GUI element)– Needed since bean has probably not been populated– Value for checkbox is of type Boolean– Value for radio button or textfield corresponds to request parameterValue for radio button or textfield corresponds to request parameter

– Sample codepublic void someMethod(ValueChangeEvent event) {boolean flag = g((Boolean)event.getNewValue()).booleanValue();

takeActionBasedOn(flag);}

33

Example: Changing the Colors Listed for FG and BG ColorsListed for FG and BG Colors

• h:selectOneMenu uses f:selectItems to get li f b b ilist of combobox entries

• Use checkbox to invoke ValueChangeListenerValueChangeListener

• Have listener toggle the definition of the listslists– Color names– RGB values

34

Page 17: 06-Event-Handlingadvansed

Steps in Using JSF

1) Create a beanA) Properties for form dataA) Properties for form dataB) Action controller and event listener methodsC) Placeholders for results data

2) Create an input form2) Create an input formA) Input fields refer to bean propertiesB) Button specifies action controller method that will return conditionC) Button or other GUI control specifies event listener methodC) Button or other GUI control specifies event listener method

3) Edit faces-config.xmlA) Declare the beanB) S if i ti lB) Specify navigation rules

4) Create results pages– Output form data and results data with h:outputText

5) P di JSP5) Prevent direct access to JSP pages– Use a filter that redirects blah.jsp to blah.faces

35

Step 1: Create Bean (ResumeBean)

• (A) Code for color choicesprivate SelectItem[] availableColorNames =p []{ new SelectItem("BLACK"),new SelectItem("WHITE"),new SelectItem("SILVER"),new SelectItem("RED"),new SelectItem("GREEN")new SelectItem("GREEN"),new SelectItem("BLUE") };

private SelectItem[] availableColorValues ={ new SelectItem("#000000"),new SelectItem("#FFFFFF"),new SelectItem( #FFFFFF ),new SelectItem("#C0C0C0"),new SelectItem("#FF0000"),new SelectItem("#00FF00"),new SelectItem("#0000FF") };

i t b l i U i C l N tprivate boolean isUsingColorNames = true;

public SelectItem[] getAvailableColors() {if (isUsingColorNames) {return(availableColorNames);return(availableColorNames);

} else {return(availableColorValues);

}}36

Page 18: 06-Event-Handlingadvansed

Step 1: Create Bean

• (B) Event listener– When checkbox selected, change color choices to return

RGB values instead of color names– Action controller action listener and other form data– Action controller, action listener, and other form data

shown in previous example

public void changeColorMode(ValueChangeEvent event) {public void changeColorMode(ValueChangeEvent event) {boolean flag =

((Boolean)event.getNewValue()).booleanValue();setUsingColorNames(!flag);setUsingColorNames(!flag);

}

37

Step 2: Create Input Form (and Specify Event Listener)(and Specify Event Listener)

• New features– Use h:selectBooleanCheckbox to create checkbox– Use valueChangeListener to designate event listener code

Use onclick to automatically submit form when checkbox– Use onclick to automatically submit form when checkbox value changes

• You could use onchange on Firefox, but with onchange in I t t E l i t f l h tInternet Explorer, input focus also has to move

• Example code

<h:selectBooleanCheckbox valueChangeListener="#{resumeBean.changeColorMode}"onclick="submit()"immediate="true"/>

38

Client-side JavaScript code

Page 19: 06-Event-Handlingadvansed

Step 2: Initial Result

• File is tomcat_dir/webapps/jobs/customize.jspURL i h //l lh /j b / i f• URL is http://localhost/jobs/customize.faces

39

Steps 2: Result of Changing Checkbox (Independent of Action Controller)(Independent of Action Controller)

40

Page 20: 06-Event-Handlingadvansed

Steps 3-5

• Unchanged from previous slides

41

© 2009 Marty Hall

Combining ActionCombining Action Listeners and Action Controllers for SameControllers for Same

ButtonCustomized Java EE Training: http://courses.coreservlets.com/

Servlets, JSP, JSF 1.x & JSF 2.0, Struts Classic & Struts 2, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6. Developed and taught by well-known author and developer. At public venues or onsite at your location.

Page 21: 06-Event-Handlingadvansed

Motivation

• Usually, action listeners and action ll h d diff bcontrollers are attached to different buttons

• Sometimes, you are forced to use bothLi h l l l d il f GUI bj– Listeners have access to low-level details of GUI object

• Renderer, client ID, etc.• Especially relevant when we cover custom components

• Most common example: server-side image maps– h:commandButton with image instead of value results in

image map– Actual incoming request parameter names are clientID xActual incoming request parameter names are clientID.x

and clientID.y• Only listener can discover the client ID

43

Example: Choosing Background Color from Image MapColor from Image Map

• Display grayscale color bar to user• Let them click on desired color for

backgroundB ild di RGB l• Build corresponding RGB value– Read the clientID.x value

Normalize to 0 256 based on image width– Normalize to 0-256 based on image width– Output as hex digits into #RRGGBB string– Done in action listener

• Forward to JSP page– Done in action controller

44

Page 22: 06-Event-Handlingadvansed

Steps in Using JSF

1) Create a beanA) Properties for form dataA) Properties for form dataB) Action controller and event listener methodsC) Placeholders for results data

2) Create an input form2) Create an input formA) Input fields refer to bean propertiesB) Button specifies action controller method that will return conditionC) Button or other GUI control specifies event listener methodC) Button or other GUI control specifies event listener method

3) Edit faces-config.xmlA) Declare the beanB) S if i ti lB) Specify navigation rules

4) Create results pages– Output form data and results data with h:outputText

5) P di JSP5) Prevent direct access to JSP pages– Use a filter that redirects blah.jsp to blah.faces

45

Step 1: Create Bean

• (A) Form data

package coreservlets;

...

public class ColorBean {private String bgColor = "WHITE";p g g ;

public String getBgColor() { return(bgColor); }

bli id C l (S i b C l ) {public void setBgColor(String bgColor) {this.bgColor = bgColor;

}

46

Page 23: 06-Event-Handlingadvansed

Step 1: Create Bean

• Listener looks up x value and creates colorpublic void selectGrayLevel(ActionEvent event) {FacesContext context = FacesContext.getCurrentInstance();String clientId = event.getComponent().getClientId(context);HttpServletRequest request =

( l ) l () ()(HttpServletRequest)context.getExternalContext().getRequest();String grayLevelString = request.getParameter(clientId + ".x");int grayLevel = 220;try {

l ( l i )grayLevel = Integer.parseInt(grayLevelString);} catch(NumberFormatException nfe) {}// Image is 440 pixels, so scale.grayLevel = (256 * grayLevel) / 440;St i V l I t t St i ( L l 16)String rVal = Integer.toString(grayLevel, 16);setBgColor("#" + rVal + rVal + rVal);

}

• Controller designates output pageController designates output pagepublic String showPreview() {

return("success");}47

Step 2: Create Input Form

• Specify both action and actionListener– Listener runs first and has access to low-level internals– Also use h:commandButton with image instead of value

• Results in server side image map• Results in server-side image map

• Code

<h:form>...<h:commandButton

image="images/GrayBar.gif" actionListener="#{colorBean.selectGrayLevel}"action="#{colorBean.showPreview}"/>#{ } /

</h:form>

48

Page 24: 06-Event-Handlingadvansed

Step 2: Result

• File is tomcat_dir/webapps/jobs/customize-bg.jspURL i h //l lh /j b / i b f• URL is http://localhost/jobs/customize-bg.faces

49

Step 3: Edit faces-config.xml

• Declaring bean…<faces-config>

...<managed-bean>

<managed-bean-name>colorBean</managed-bean-name><managed-bean-class>

l lcoreservlets.ColorBean</managed-bean-class><managed-bean-scope>request</managed-bean-scope>

</ d b ></managed-bean>…

</faces-config>

50

Page 25: 06-Event-Handlingadvansed

Step 3: Edit faces-config.xml

• Specifying navigation rules…

<faces-config>…< i ti l ><navigation-rule>

<from-view-id>/customize-bg.jsp</from-view-id><navigation-case>

<from outcome>success</from outcome><from-outcome>success</from-outcome><to-view-id>

/WEB-INF/results/show-preview2.jsp</to view id></to-view-id>

</navigation-case></navigation-rule>

</faces-config></faces-config>

51

Step 4: Create Results Pages

• WEB-INF/results/show-preview2.jsp

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %><%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>@ g p //j /j / p<f:view><!DOCTYPE ...><HTML><HEAD><TITLE>Preview of Background Color</TITLE></HEAD><BODY BGCOLOR="<h:outputText value="#{colorBean.bgColor}"/>"><H1 ALIGN="CENTER">Preview of Background Color</H1>Experienced employeeExperienced employeeseeks challenging position doing something.<H2>Employment History</H2>Blah, blah, blah, blah. Yadda, yadda, yadda, yadda.…</HTML></f:view>

52

Page 26: 06-Event-Handlingadvansed

Step 4: Example Result

53

Step 5: Prevent Direct Access to JSP Pagesto JSP Pages

• Use filter that captures url-pattern *.jsp– No changes from previous examples

54

Page 27: 06-Event-Handlingadvansed

Summary

• Event listeners are used to handle events that affect only the user interfaceaffect only the user interface– Typically fire before beans are populated and validation is

performed• Use immediate="true" to designate this behavior• Use immediate= true to designate this behavior

– Form is redisplayed after listeners fire• No navigation rules apply

• Action listeners• Action listeners– Attached to buttons, hypertext links, or image maps– Automatically submit the form

V l h li t• Value change listeners – Attached to radio buttons, comboboxes, list boxes, checkboxes,

textfields, etc.– Require onclick="submit()" or onchange="submit()" to submit form

• Test carefully on all expected browsers

55

© 2009 Marty Hall

Questions?

Customized Java EE Training: http://courses.coreservlets.com/Servlets, JSP, JSF 1.x & JSF 2.0, Struts Classic & Struts 2, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6.

Developed and taught by well-known author and developer. At public venues or onsite at your location.