To this point, we've used only output components in table columns, but you can place any JSF component in a table column. Figure 5-4 shows an application that uses a variety of components in a table. Figure 5-4. JSF Components in Table Cells h:dataTable iterates over data, so the table shown in Figure 5-4 provides a list of integers for that purpose; the current integer populates components in the Number, Textfields, Buttons, and Menu columns. Components in a table are no different from components outside tables; you can manipulate them in any manner you desire, including conditional rendering with the rendered attribute, handling events, and the like. The directory structure for the application shown in Figure 5-4 is shown in Figure 5-5. The JSF page, faces configuration file and property resource bundle are given in Listing 5-8 through Listing 5-10. Listing 5-8. components/index.jsp 1. <html> 2. <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> 3. <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> 4. <f:view> 5. <head> 6. <link href="styles.css" rel="stylesheet" type="text/css"/> 7. <title> 8. <f:loadBundle basename="com.corejsf.messages" var="msgs"/> 9. <h:outputText value="#{msgs.windowTitle}"/> 10. </title> 11. </head> 12. <body> 13. <h:form> 14. <h:dataTable value="#{numberList}" var="number"> 15. <h:column> 16. <f:facet name="header"> 17. <h:outputText value="#{msgs.numberHeader}"/> 18. </f:facet> 19. <h:outputText value="#{number}"/> 20. </h:column> 21. <h:column> 22. <f:facet name="header"> 23. <h:outputText value="#{msgs.textfieldHeader}"/> 24. </f:facet> 25. <h:inputText value="#{number}" size="3"/> 26. </h:column> 27. <h:column> 28. <f:facet name="header"> 29. <h:outputText value="#{msgs.buttonHeader}"/> 30. </f:facet> 31. <h:commandButton value="#{number}"/> 32. </h:column> 33. <h:column> 34. <f:facet name="header"> 35. <h:outputText value="#{msgs.checkboxHeader}"/> 36. </f:facet> 37. <h:selectBooleanCheckbox value="false"/> 38. </h:column> 39. <h:column> 40. <f:facet name="header"> 41. <h:outputText value="#{msgs.linkHeader}"/> 42. </f:facet> 43. <h:commandLink> 44. <h:outputText value="#{number}"/> 45. </h:commandLink> 46. </h:column> 47. <h:column> 48. <f:facet name="header"> 49. <h:outputText value="#{msgs.graphicHeader}"/> 50. </f:facet> 51. <h:graphicImage value="images/dice#{number}.gif" 52. style="border: 0px"/> 53. </h:column> 54. <h:column> 55. <f:facet name="header"> 56. <h:outputText value="#{msgs.menuHeader}"/> 57. </f:facet> 58. <h:selectOneMenu> 59. <f:selectItem itemLabel="#{number}" itemValue="#{number}"/> 60. </h:selectOneMenu> 61. </h:column> 62. <h:column> 63. <f:facet name="header"> 64. <h:outputText value="#{msgs.radioHeader}"/> 65. </f:facet> 66. <h:selectOneRadio layout="LINE_DIRECTION" value="nextMonth"> 67. <f:selectItem itemValue="yes" itemLabel="yes"/> 68. <f:selectItem itemValue="no" itemLabel="no" /> 69. </h:selectOneRadio> 70. </h:column> 71. <h:column> 72. <f:facet name="header"> 73. <h:outputText value="#{msgs.listboxHeader}"/> 74. </f:facet> 75. <h:selectOneListbox size="3"> 76. <f:selectItem itemValue="yes" itemLabel="yes"/> 77. <f:selectItem itemValue="maybe" itemLabel="maybe"/> 78. <f:selectItem itemValue="no" itemLabel="no" /> 79. <f:selectItem itemValue="ok" itemLabel="ok" /> 80. </h:selectOneListbox> 81. </h:column> 82. </h:dataTable> 83. </h:form> 84. </body> 85. </f:view> 86. </html> Listing 5-9. components/WEB-INF/faces-config.xml 1. <?xml version="1.0"?> 2. 3. <!DOCTYPE faces-config PUBLIC 4. "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN" 5. "http://java.sun.com/dtd/web-facesconfig_1_0.dtd"> 6. 7. <faces-config> 8. <managed-bean> 9. <managed-bean-name>numberList</managed-bean-name> 10. <managed-bean-class>java.util.ArrayList</managed-bean-class> 11. <managed-bean-scope>session</managed-bean-scope> 12. <list-entries> 13. <value>1</value> 14. <value>2</value> 15. <value>3</value> 16. <value>4</value> 17. <value>5</value> 18. </list-entries> 19. </managed-bean> 20. </faces-config> Listing 5-10. components/WEB-INF/classes/com/corejsf/messages.properties 1. windowTitle=Using JSF Components in Tables 2. 3. numberHeader=Number 4. textfieldHeader=Textfields 5. buttonHeader=Buttons 6. checkboxHeader=Checkboxes 7. linkHeader=Links 8. menuHeader=Menu 9. graphicHeader=Graphics 10. radioHeader=Radio Buttons 11. listboxHeader=List Boxes Figure 5-5. The Directory Structure for the Components Example |