Core JavaServer Faces

Book coverBug Report Page (First Edition)

Page xv
After "...two years to release the JSF 1.0 specification and reference implementation.", add "(A maintenance release, called JSF 1.1, followed shortly thereafter. It introduced no new features.)"
Page xvi
Change "We only assume only basic HTML skills ..." to "We assume only basic HTML skills ..."
Page xvi
Change "Of course, being a 1.0 release, the current version" to "Of course, the initial version"
Page xvi
Change "No programming is required for use of to use the tags." to "No programming is required to use the tags."
Page xvii
Change "missing from JSF 1.0" to "missing from JSF 1.0/1.1"
Page 11
Note that Tomcat 5.5 requires slightly different instructions; check the FAQ.
Page 11
Remove the box around Figure 1-6
Page 11
In item 4., change jsf/lib/jsf-impl.jar:jsf/lib/jsf-impl.jar to jsf/lib/jsf-impl.jar
Page 13
Remove one space before public String getName() { . . . }
Page 32
Note that Tomcat 5.5 requires slightly different instructions; check the FAQ.
Page 44
Change "in the faces-config.xml file" to "in the QuizBean class". Change "how to configure beans" to "how to use beans".  [In an earlier version of the manuscript, the quiz really was configured in faces-config.xml, as described on page 55, but we decided to simplify the example.]
Page 49 Listing 2-4
Change the title to numberquiz/WEB-INF/faces-config.xml
Page 50
In faces-config.xml, change index.faces to index.jsp (2x)
Page 56
Change "exactly one of the elements value, null-value, values or map-entries" to "exactly one of the elements value, null-value, map-entries or list-entries"
Page 57
Change QuizBackingBean to QuizBean
Page 73
Change "The more.jsp and failure.jsp pages are omitted." to "The success.jsp and failure.jsp pages are omitted."
Page 81
Change "Figure 3-6 shows..." to "Figure 3-8 shows..."
Page 86
Change "has 2.8 attributes" to "has an average of 2.8 attributes"
Page 91
Change "the JSF framework calls Form.getStateOutput()" to "the JSF framework calls Form.getStatePrompt()"
Page 109
Change "The h:outputFormat tag uses a java.text.MessageFormat instance to format it's output." to "The h:outputFormat tag uses a java.text.MessageFormat instance to format its output."
Page 112
In the second-to-last table entry, change disabled to disabled (h:commandButton only)
Page 116
The line private String welcomeURL... should be indented as far as the code line following it.
Page 117
Swap the lines <a name="toc">Table of Contents</a> and <a name="conclusion">Conclusion</a> (to match the order in Table 4-19).
Page 117
Change "Generally, you use h:outputLink for text" to "Generally, you use h:outputText for text"
Page 118
Remove the lines <f:param name="locale" value="german"/> and <f:param name="locale" value="english"/>
Page 124
Change PAGE_DIRECTION to pageDirection and LINE_DIRECTION to lineDirection.
Page 125, 126, 129, 130
Change <f:selectItem itemValue="Red"/> to <f:selectItem itemValue="Red" itemLabel="Red"/> and change the other f:selectItem tags in the same fashion. (Unlike the SelectItem constructor, the f:selectItem tag isn't smart enough to set the label from the value.)
Page 127
Change PAGE_DIRECTION to pageDirection and LINE_DIRECTION to lineDirection (5x each)
Page 128
Change <f:selectItem value="1900"/> <f:selectItem value="1901"/> to <f:selectItem itemValue="1900" itemLabel="1900"/> <f:selectItem itemValue="1901" itemLabel="1901"/>
Page 130
Add matching itemLabel attributes after each itemValue, i.e.
<f:selectItem itemValue="Cheese" itemLabel="Cheese"/>
      <f:selectItem itemValue="Pickle" itemLabel="Pickle/> . . .
In the following paragraph, change "Those values are also used" to "The itemLabel values are used". Remove ", so f:selectItem also has an itemLabel attribute". [In the beta version, the value was automatically used as the label when the label was omitted, but this feature has since been removed.]
Pages 130 and 131
Change </h:selectOneRadio> to </h:selectOneMenu> (2x)
Page 132
Change
<h:selectOneRadio>
    <f:selectItems value="#{form.condiments}"/> 
</h:selectOneRadio>
to
<h:selectOneRadio value="#{form.condiments}">
    <f:selectItems value="#{form.condimentItems}"/>
</h:selectOneRadio>
Then change condiments to condimentItems (3x) and getCondiments to getCondimentItems
Page 133
Change condiments to condimentItems (9x) and getCondiments to getCondimentItems
Page 133
Change "weekdays would be neatly arranged" to "days of the week would be neatly arranged"
Page 149
In table 4-23, add as the first row: for | The ID of the component whose message is displayed--applicable only to h:message
Page 156
Change "...it's error message..." to "...its error message...".
Page 155 and 166
In the entry for rowClasses, change "colums" to "rows"
Page 175, 176
In the Listing headings, change edit/ to editing/ (3x)
Page 177
Change "The table shown in Figure 5-7 uses the styleClass, headerClass, and rowClasses." to "The table shown in Figure 5-7 uses the styleClass, headerClass, and columnClasses."
Page 185
Change "or an instance of java.sql.Result" to "or an instance of java.sql.ResultSet"
Page 185
Change getWrappedObject to getWrappedData (2x) and setWrappedObject to setWrappedData.
Page 187
Change getWrappedObject to getWrappedData (2x) and setWrappedObject to setWrappedData (2x).
Page 188 - 191
In the Listing headings, change delete/ to deletingRows/ (6x)
Page 194
Change "Notice that we create an our own..." to "Notice that we create our own..."
Page 211
Change MM/dddd to MM/yyyy.
Page 227
Before "Now we can use the f:converter tag...", insert this sentence: "In the following examples, we will assume that the card property of the PaymentBean has type CreditCard, as shown in Listing 6-13 on page 237."
Page 237, 239
Change
void validate(FacesContext context, UIComponent component)

to
void validate(FacesContext context, UIComponent component, Object value)
Page 275
Change "Starting with the Apply Request Values phases" to "Starting with the Apply Request Values phase"
Page 289 rushmore/WEB-INF/classes/com/corejsf/messages.properties
Change Tooltip to PageTitle (4x)
Page 289
Add the following to messages.properties:
lincolnWindowTitle=Lincoln 
jeffersonWindowTitle=Jefferson 
rooseveltWindowTitle=Roosevelt 
washingtonWindowTitle=Washington
Page 291
Change ChangeLocaleBean to RushmoreListener. Inside the processAction method, remove all code between { and } (but not the braces themselves). Insert the following comment inside the braces:
// implementation is identical to the listen
// method in Rushmore.java (Listing 7-11)
Page 300
In the tip at the bottom of the page, change "web.xml" to "faces-config.xml"
Page 305, 563, 581, 600
Change "JSF 1.0" to "JSF 1.0/1.1"
Page 307
Change "The JSF 1.0 reference implementation" to "The JSF reference implementation"
Page 333
Change "That attribute's value is /header.jsp" to "That attribute's value is /bookHeader.jsp"
Page 340
Change "the controller sets the book attribute to Alice in Wonderland" to "the controller sets the book attribute to Peter Pan"
Page 355
Change "That interface defines 36 methods" to "That class defines 36 abstract methods"
Page 355
Change "...an existing class that implements the interface" to "...an existing class that extends the UIComponent class"
Page 397
Change document['_id1'] to document.forms['_id1'] (5x)
Page 399  spinner-js/WEB-INF/classes/com/corejsf/JSSpinnerRenderer.java
Change line 66 to
+ "onclick=\"document.forms[''{0}''][''{1}''].spin(-1); \"/>"
and line 68 to
+ " onclick=\"document.forms[''{0}''][''{1}''].spin(1); \"/>"
(That is, add a space before onclick and remove the } after spin.)
Page 404
In the corejsf:tabbedPane at the bottom of the page, change TabKey to TabText (4x)
Page 425-427
The tabbedpane/WEB-INF/classes/com/corejsf/TabbedPaneTag.java listing is wrong. It should be bears/WEB-INF/classes/com/corejsf/TabbedPaneTag.java, and there are minor differences between the printed code and the code distribution. The file in the code distribution is correct.
Page 485
Indent code line 29 to line up with line 28.
Page 568 ch12/fileupload/WEB-INF/classes/com/corejsf/UploadRenderer.java line 46
Change
if (binding.getType(context) == InputStream.class) {
to
else if (binding.getType(context) == InputStream.class) {
Page 583 - 586
Change code lines 34/35 and 126/127 to
      UIData data = (UIData) component.findComponent(dataTableId);
Remove code lines 153 - 178 (they are no longer necessary) After line 120, add
      if (response == null || response.equals("")) return;
Page 606
Change lines 19 - 25 of the code listing to
         <field property="paymentForm:date" depends="required,mask">
             <arg0 key="expirationDate"/>
             <var>
                <var-name>mask</var-name>
                <var-value>^(0[1-9]|1[0-2])\/20[0-9][0-9]$</var-value>
             </var>
         </field>
(The Struts date validator can't match MM/yyyy.)
Page 616
Change "Place the file validation-rules.xml into the WEB-INF/lib directory" to "Place the file validator-rules.xml into the WEB-INF directory"
Page 640
To the index entry of "attribute tag", add page 262
Page 646
To the index entry of "facet tag", add page 167
Page 652
To the index entry of "param tag", add pages 109, 115, 296
Page 655
To the index entry of "subview tag", add page 356
Page 657
To the index entry of "verbatim tag", add pages 117, 164 To the index entry of "view tag", add page 14
ch7/rushmore/washington.jsp, ch7/rushmore/jefferson.jsp, ch7/rushmore/lincoln.jsp, ch7/rushmore/roosevelt.jsp
Change the outputText in the title element to <h:outputText value="#{msgs.windowTitle}"/>
ch12/binary/WEB-INF/faces-config.xml
Change ImageRenderer to ChartRenderer
ch12/commons-validator-lib/com/corejsf/validator/CommonsValidatorTag.java
Change
validator.setMaxlength(com.corejsf.util.Tags.evalInteger(minlength));
to
validator.setMaxlength(com.corejsf.util.Tags.evalInteger(maxlength));

Thanks to K.C. Baltz, Jaye Bass, Eugene Bendersky, Jorge Bittencourt, Mark Boatman, Jeanne Boyarsky, Matt Blum, Doug Carson, Yaakov Chaikin, Chul-Woo Choi, Marc Chung, Scott Czadzeck, Julien Davet, Scott Dawson, Michael O. Duffy, Tom Forrester, Scott J. Geertgens, Joey Geiger, Kenneth Gertsen, Rob Gordon, Derek Graeber, Marty Hall, Trent Hinkel, Winston Huang, Adam Jackson, Ivar de Jong, Yi Jin, Steve Kalvi, John Kent, Scott Leberknight, Emmanuel Lecharny, Johnny Lee Lenhart, Benton Leong, Yin Lo, Jose D. Montero, Rory Mc Naughton, Paolo Melendres, Michael Mitiaguin, David Moffat, Andreas Mueller, Timo Neumann, J Pfersich, Nate Pitzer, Franck Quinard, Sascha Robert, Holger Schimanski, Michael Skarpelos, Bill Siggelkow, Rob Smith, David Thompson, Rob Volden, Martin Walla, Dusty Wilmes, Jesse Wilson, Kenneth Wong, Michael Zeidler, and (your name might go here) for their help!