0001: /*
0002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
0003: *
0004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
0005: *
0006: * The contents of this file are subject to the terms of either the GNU
0007: * General Public License Version 2 only ("GPL") or the Common
0008: * Development and Distribution License("CDDL") (collectively, the
0009: * "License"). You may not use this file except in compliance with the
0010: * License. You can obtain a copy of the License at
0011: * http://www.netbeans.org/cddl-gplv2.html
0012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
0013: * specific language governing permissions and limitations under the
0014: * License. When distributing the software, include this License Header
0015: * Notice in each file and include the License file at
0016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
0017: * particular file as subject to the "Classpath" exception as provided
0018: * by Sun in the GPL Version 2 section of the License file that
0019: * accompanied this code. If applicable, add the following below the
0020: * License Header, with the fields enclosed by brackets [] replaced by
0021: * your own identifying information:
0022: * "Portions Copyrighted [year] [name of copyright owner]"
0023: *
0024: * Contributor(s):
0025: *
0026: * The Original Software is NetBeans. The Initial Developer of the Original
0027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
0028: * Microsystems, Inc. All Rights Reserved.
0029: *
0030: * If you wish your version of this file to be governed by only the CDDL
0031: * or only the GPL Version 2, indicate your decision by adding
0032: * "[Contributor] elects to include this software in this distribution
0033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
0034: * single choice of license, a recipient has the option to distribute
0035: * your version of this file under either the CDDL, the GPL Version 2 or
0036: * to extend the choice of license to its licensees as provided above.
0037: * However, if you add GPL Version 2 code and therefore, elected the GPL
0038: * Version 2 license, then the option applies only if the new code is
0039: * made subject to such option by the copyright holder.
0040: */
0041: package com.sun.rave.web.ui.component;
0042:
0043: import java.io.IOException;
0044: import javax.faces.component.UIComponent;
0045: import javax.faces.context.FacesContext;
0046: import javax.faces.el.MethodBinding;
0047: import javax.faces.el.ValueBinding;
0048:
0049: /**
0050: * Use the <code>ui:tableRowGroup</code>
0051: * tag to define the rows of a table, inside a <a href="table.html"><code>ui:table</code></a>
0052: * tag. A table must include at least one tableRowGroup component to
0053: * contain the table row content. <br>
0054: * <p style="color: rgb(0, 0, 0);">The <code>ui:table</code>
0055: * tag is
0056: * used to define the structure and actions of the table, and is a
0057: * container for <code>ui:tableRowGroup</code>
0058: * tags. The <code>ui:tableRowGroup</code> tag is a container for <code></code><a
0059: * href="tableColumn.html"><code>ui:tableColumn</code></a><code></code>
0060: * tags, which are used <code></code>to define the
0061: * columns of the table. The <a href="table.html">documentation
0062: * for the <code>ui:table</code> tag</a> contains detailed information
0063: * about the table component. This page provides details about how
0064: * to create table rows only.<br>
0065: * </p>
0066: * <p style="color: rgb(0, 0, 0);">When you use one <code>ui:tableRowGroup</code>
0067: * tag in the <code>ui:table</code> tag, you create a basic table.
0068: * Examples of basic tables are shown in the <a table.html=""><code>ui:table</code>
0069: * tag documentation</a>. When
0070: * you use multiple <code>ui:tableRowGroup</code> tags, you create a
0071: * group table, which is discussed in detail in this document.<br>
0072: * </p>
0073: * <p style="color: rgb(0, 0, 0);">
0074: * </p>
0075: * <h3 style="color: rgb(0, 0, 0);">HTML Elements and Layout</h3>
0076: * <span style="color: rgb(0, 0, 0);">The tableRowGroup component is used
0077: * to define attributes for XHTML </span><code
0078: * style="color: rgb(0, 0, 0);"><tr></code>
0079: * <span style="color: rgb(0, 0, 0);">
0080: * elements, which
0081: * are used
0082: * to display rows of data. You can specify multiple <code>ui:tableRowGroup</code>
0083: * tags to create groups of rows. Each group is visually separate from the
0084: * other groups, but all rows of the table can be sorted and filtered at
0085: * once, within their respective groups. <br>
0086: * <br>
0087: * UI guidelines recommend
0088: * that
0089: * column headers and table column footers are
0090: * only rendered
0091: * once for each table. Column headers typically appear at the top of the
0092: * table,
0093: * below the Action Bar and above all row groups. Table column footers
0094: * appear only at the
0095: * bottom of the table, below all row groups. The column headers and
0096: * table column footers are defined in the <code>headerText</code>
0097: * and <code>tableFooterText</code> attributes of the <code>ui:tableColumn</code>
0098: * tags. To ensure that these headers and footers are rendered only once,
0099: * you should define the
0100: * <code>headerText</code>
0101: * and <code>tableFooterText</code> attributes only in the <code>ui:tableColumn</code>
0102: * tags inside the
0103: * first <code>ui:tableRowGroup</code> tag in the
0104: * table. See the </span><a href="tableColumn.html"
0105: * style="color: rgb(0, 0, 0);"><code>ui:tableColumn</code>
0106: * documentation</a><span style="color: rgb(0, 0, 0);"> for more
0107: * information. </span><br style="color: rgb(0, 0, 0);">
0108: * <span style="color: rgb(0, 0, 0);"><br>
0109: * The following <a href="tableRowGroup.html#diagram">diagram</a>
0110: * shows the placement of the areas of a table, and highlights the areas
0111: * that are defined with <code>ui:tableRowGroup</code> tags. This diagram
0112: * depicts two row groups.</span><br>
0113: * <br>
0114: * <a name="diagram"></a><br>
0115: * <table style="text-align: left; width: 100%;" border="1" cellpadding="2"
0116: * cellspacing="2">
0117: * <tbody>
0118: * <tr style="color: rgb(204, 204, 204);">
0119: * <td
0120: * style="vertical-align: top; background-color: rgb(153, 153, 153);"
0121: * rowspan="1" colspan="1">Title
0122: * Bar </td>
0123: * </tr>
0124: * <tr style="color: rgb(153, 153, 153);">
0125: * <td
0126: * style="vertical-align: top; background-color: rgb(208, 208, 208);"
0127: * rowspan="1" colspan="1">Action
0128: * Bar (top) </td>
0129: * </tr>
0130: * <tr>
0131: * <td
0132: * style="vertical-align: top; background-color: rgb(210, 224, 235);">
0133: * <table style="text-align: left; height: 223px; width: 100%;"
0134: * border="1" cellpadding="2" cellspacing="2">
0135: * <tbody>
0136: * <tr>
0137: * <td
0138: * style="vertical-align: top; background-color: rgb(232, 232, 232); color: rgb(153, 153, 153);">Column
0139: * Header <br>
0140: * </td>
0141: * <td
0142: * style="vertical-align: top; background-color: rgb(232, 232, 232); color: rgb(153, 153, 153);">Column
0143: * Header<br>
0144: * </td>
0145: * </tr>
0146: * <tr>
0147: * <td
0148: * style="vertical-align: top; background-color: rgb(210, 224, 235);"
0149: * rowspan="1" colspan="2">Group
0150: * Header Bar (specified with <code>headerText</code>
0151: * attribute and <code>header</code> facet in first <code>ui:tableRowGroup</code>
0152: * tag) </td>
0153: * </tr>
0154: * <tr>
0155: * <td
0156: * style="vertical-align: top; background-color: rgb(210, 224, 235);">Table
0157: * data
0158: * specified in <code>ui:tableRowGroup</code><br>
0159: * <code> <br>
0160: * <br>
0161: * <br>
0162: * </code></td>
0163: * <td
0164: * style="vertical-align: top; background-color: rgb(210, 224, 235);">Table
0165: * data
0166: * specified in <code>ui:tableRowGroup</code><br>
0167: * </td>
0168: * </tr>
0169: * <tr>
0170: * <td
0171: * style="vertical-align: top; background-color: rgb(232, 232, 232); color: rgb(153, 153, 153);">Column
0172: * Footer</td>
0173: * <td
0174: * style="vertical-align: top; background-color: rgb(232, 232, 232); color: rgb(153, 153, 153);">Column
0175: * Footer <br>
0176: * </td>
0177: * </tr>
0178: * <tr>
0179: * <td
0180: * style="vertical-align: top; background-color: rgb(210, 224, 235);"
0181: * rowspan="1" colspan="2">Group
0182: * Footer Bar <br>
0183: * </td>
0184: * </tr>
0185: * <tr>
0186: * <td
0187: * style="vertical-align: top; background-color: rgb(163, 184, 203);"
0188: * rowspan="1" colspan="2">Group Header Bar<br>
0189: * </td>
0190: * </tr>
0191: * <tr>
0192: * <td
0193: * style="vertical-align: top; background-color: rgb(163, 184, 203);">Table
0194: * data specified in <code>ui:tableRowGroup</code><br>
0195: * <br>
0196: * <br>
0197: * <br>
0198: * <br>
0199: * </td>
0200: * <td
0201: * style="vertical-align: top; background-color: rgb(163, 184, 203);">Table
0202: * data specified in <code>ui:tableRowGroup</code><br>
0203: * </td>
0204: * </tr>
0205: * <tr>
0206: * <td
0207: * style="vertical-align: top; background-color: rgb(232, 232, 232); color: rgb(153, 153, 153);">Column
0208: * Footer<br>
0209: * </td>
0210: * <td
0211: * style="vertical-align: top; background-color: rgb(232, 232, 232); color: rgb(153, 153, 153);">Column
0212: * Footer</td>
0213: * </tr>
0214: * <tr>
0215: * <td
0216: * style="vertical-align: top; background-color: rgb(163, 184, 203);"
0217: * rowspan="1" colspan="2">Group Footer Bar<br>
0218: * </td>
0219: * </tr>
0220: * <tr>
0221: * <td
0222: * style="vertical-align: top; background-color: rgb(232, 232, 232); color: rgb(153, 153, 153);">Table
0223: * Column Footer </td>
0224: * <td
0225: * style="vertical-align: top; background-color: rgb(232, 232, 232); color: rgb(153, 153, 153);">Table
0226: * Column Footer </td>
0227: * </tr>
0228: * </tbody>
0229: * </table>
0230: * <big><span style="color: rgb(0, 0, 0);"> </span></big></td>
0231: * </tr>
0232: * <tr>
0233: * <td
0234: * style="vertical-align: top; background-color: rgb(208, 208, 208);"><span
0235: * style="color: rgb(153, 153, 153);">Action
0236: * Bar (bottom) </span><small> </small> </td>
0237: * </tr>
0238: * <tr>
0239: * <td
0240: * style="vertical-align: top; background-color: rgb(153, 153, 153);"
0241: * rowspan="1" colspan="1"><span style="color: rgb(0, 0, 0);"><span
0242: * style="color: rgb(204, 204, 204);">Footer</span><code></code></span><code>
0243: * </code></td>
0244: * </tr>
0245: * </tbody>
0246: * </table>
0247: * <span style="text-decoration: line-through;"></span><br>
0248: * <h4 style="color: rgb(0, 0, 0);">Group Header Bar</h4>
0249: * <span style="color: rgb(0, 0, 0);">The Group Header Bar displays
0250: * a header by default at the top of each group of rows. The text of
0251: * the group header
0252: * is specified with the <code>headerText</code> attribute. You can
0253: * specify a separate component to provide header content by using the <code>header</code>
0254: * facet, which overrides the <code>headerText</code> attribute.
0255: * You can
0256: * use the following <code>ui:tableRowGroup</code> attributes to change
0257: * the appearance of the group header:<br>
0258: * </span>
0259: * <ul style="color: rgb(0, 0, 0);">
0260: * <li>
0261: * <p><code>aboveColumnHeader</code>
0262: * set to true makes the group header display above the column header.</p>
0263: * </li>
0264: * <li>
0265: * <p><code>selectMultipleToggleButton</code>
0266: * set to true adds a checkbox that allows users to
0267: * select and deselect all rows in the group</p>
0268: * </li>
0269: * <li>
0270: * <p><code>collapsed</code>
0271: * set to true causes the group to be rendered with the rows hidden, and
0272: * only the group header is visible. </p>
0273: * <p> </p>
0274: * </li>
0275: * <li>
0276: * <p><code>groupToggleButton</code>
0277: * set to true adds a button image that allows users to expand and
0278: * collapse
0279: * the group of rows. When the group collapses, all the rows are hidden
0280: * and only the header is visible. </p>
0281: * <p> </p>
0282: * </li>
0283: * <li>
0284: * <p><code>extraHeaderHtml</code>
0285: * can be used to append HTML code to the <code><tr></code> element
0286: * that is rendered for the group header</p>
0287: * </li>
0288: * </ul>
0289: * <span style="color: rgb(0, 0, 0);">Note: Detailed descriptions of
0290: * the
0291: * attributes are in the attributes table at the end of this document.<br>
0292: * </span>
0293: * <h4 style="color: rgb(0, 0, 0);">Group Footer Bar</h4>
0294: * <p style="color: rgb(0, 0, 0);">The Group Footer Bar
0295: * displays an optional footer below each group of rows. The text of the
0296: * group footer is specified with the <code>footerText</code> attribute.
0297: * You can specify a separate component to provide the footer content by
0298: * using the <code>footer</code> facet, which overrides the <code>footerText</code>
0299: * attribute. You can use the following
0300: * <code>ui:tableRowGroup</code>
0301: * attributes to change
0302: * the appearance of the group footer:<br>
0303: * <code><br>
0304: * </code></p>
0305: * <ul style="color: rgb(0, 0, 0);">
0306: * <li><code>aboveColumnFooter</code>
0307: * set to true makes the group footer display above the column footer.</li>
0308: * <li>
0309: * <p> <code>extraFooterHtml</code> can be used to
0310: * append HTML code to the <code><tr></code> element that is
0311: * rendered for the group footer</p>
0312: * </li>
0313: * </ul>
0314: * <h4 style="color: rgb(0, 0, 0);">Table Data</h4>
0315: * <p><span style="color: rgb(0, 0, 0);">The table data is specified with
0316: * the <code>sourceData</code> and <code>sourceVar</code> attributes.
0317: * The <code>sourceData</code> attribute specifies the source of the data
0318: * that populates the table. The <code>sourceVar</code> attribute
0319: * specifies the name of the request-scope variable to use for exposing
0320: * the model data when iterating over table rows. Each table in a JSP page
0321: * must use a unique <code>sourceVar</code> value. See the <a
0322: * href="#Lifecycle">Life Cycle section </a>for more information about
0323: * these attributes. </span><span
0324: * style="color: rgb(102, 102, 204);"><span
0325: * style="color: rgb(255, 153, 0);">
0326: * </span></span><span style="color: rgb(102, 102, 204);"> </span></p>
0327: * <h3>Facets</h3>
0328: * <span style="color: rgb(0, 0, 0);">The </span><code
0329: * style="color: rgb(0, 0, 0);">ui:tableRowGroup</code><span
0330: * style="color: rgb(0, 0, 0);"> tag supports the following facets,
0331: * which
0332: * allow you to customize the
0333: * layout of the component.</span><br style="color: rgb(0, 0, 0);">
0334: * <br style="color: rgb(0, 0, 0);">
0335: * <table style="width: 100%; color: rgb(0, 0, 0);" border="1"
0336: * cellpadding="2" cellspacing="2">
0337: * <tbody>
0338: * <tr>
0339: * <td style="vertical-align: top;"><span style="font-weight: bold;">Facet
0340: * Name</span><code><br>
0341: * </code></td>
0342: * <td style="vertical-align: top; font-weight: bold;">Table Item
0343: * Implemented by the Facet<br>
0344: * </td>
0345: * </tr>
0346: * <tr>
0347: * <td><code>footer
0348: * <br>
0349: * </code></td>
0350: * <td>Footer that applies to the group of rows defined by the <code>ui:tableRowGroup</code>
0351: * tag. This facet can be used to replace the default footer.<br>
0352: * </td>
0353: * </tr>
0354: * <tr>
0355: * <td><code>header</code></td>
0356: * <td>Header that applies to the group of rows defined by the <code>ui:tableRowGroup</code>
0357: * tag. This facet can be used to replace the default header. </td>
0358: * </tr>
0359: * </tbody>
0360: * </table>
0361: * <br>
0362: * <h3 style="color: rgb(0, 0, 0);">Client Side JavaScript
0363: * Functions</h3>
0364: * <span style="color: rgb(0, 0, 0);">See the </span><a
0365: * href="table.html#JavaScript" style="color: rgb(0, 0, 0);"><code>ui:table</code>
0366: * tag's
0367: * JavaScript documentation</a><span style="color: rgb(0, 0, 0);">.
0368: * The same functions are used for the
0369: * <code>ui:tableRowGroup</code> tag.</span><br>
0370: * <ul>
0371: * </ul>
0372: * <h3>Notes for the <code>ui:tableRowGroup</code> tag</h3>
0373: * All examples assume that<span style="color: rgb(102, 102, 204);"></span>
0374: * the <code>ui:table</code> tag is contained within a HTML <code><form></code>
0375: * element so actions can<span style="text-decoration: line-through;"></span><span
0376: * style="color: rgb(102, 102, 204);"></span> submit form data.
0377: * For basic table and sort
0378: * examples,<span style="text-decoration: line-through;"></span>
0379: * see the <a href="table.html"><code>ui:table</code>
0380: * tag documentation</a>
0381: * and <a href="tableColumn.html"><code>ui:tableColumn</code>
0382: * documentation</a>. <br>
0383: * <h4><span style="font-weight: bold;"><a name="Lifecycle"></a>Life Cycle</span></h4>
0384: * <span style="text-decoration: line-through;"></span>The <code>sourceData</code>
0385: * property of tableRowGroup is invoked at
0386: * least twice during
0387: * the JavaServer Faces life cycle. The <code>sourceData</code> is
0388: * invoked once during
0389: * one of the Apply Request Values, Process Validations, or Update Model
0390: * Values phases, and once during the Render Response phase. In order to
0391: * process the
0392: * previously displayed children during the Apply Request Values, Process
0393: * Validations, or Update Model Values phases,
0394: * the table
0395: * must use the same DataProvider that was used to render the previous
0396: * page. For
0397: * example, suppose that sorting, filtering, and pagination were applied
0398: * on the previous page, and
0399: * rows 10-20 of 1000 were currently displayed. You want to update only
0400: * the currently
0401: * displayed components, rows 10-20. To do this, you must not update the
0402: * DataProvider until the Invoke Application phase or Render Response
0403: * phases, when it is safe to render new
0404: * data.<br>
0405: * <p style="color: rgb(0, 0, 0);">Note that if the underlying
0406: * DataProvider has changed in any way, processing of the previously
0407: * displayed children might not be possible during the Apply Request
0408: * Values, Process
0409: * Validations, or Update Model Values phases. In addition, if the
0410: * DataProvider is null or empty, no children will be processed and
0411: * their <code>processDecodes()</code>, <code>processValidators()</code>,
0412: * and <code>processUpdates()</code> methods will not be invoked. If a
0413: * component has not been decoded (in the Apply Request Values phase),
0414: * action events might not be received and component properties such as
0415: * hyperlink query parameters cannot be retrieved. Also, if a
0416: * component has not been updated (in the Update Model Values phase),
0417: * submitted values cannot be retrieved for checkboxes, radio buttons,
0418: * etc. </p>
0419: * <span style="color: rgb(0, 0, 0);">When obtaining data is
0420: * expensive, consider caching the DataProvider. A cached DataProvider
0421: * persists across requests if the backing bean uses session scope, or if
0422: * the application uses server-side state saving and the <code>TableRowGroup.setSourceData</code>
0423: * method is set. Note that a phase listener may be used to initialize the
0424: * DataProvider during the Invoke Application Phase. However, when the
0425: * underlying DataProvider has changed in any way, UI guidelines recommend
0426: * that pagination is reset to the first page. You can use the
0427: * tableRowGroup component's <code>setFirst()</code> method to set the
0428: * first row to be displayed.<br>
0429: * <br>
0430: * </span>
0431: * <h3 style="color: rgb(0, 0, 0);"><a name="Examples"></a>Examples</h3>
0432: * <span style="color: rgb(0, 0, 0);">The following examples use a
0433: * backing bean called </span><a href="table.html#Example:_TableBean_"
0434: * style="color: rgb(0, 0, 0);">TableBean</a><span
0435: * style="color: rgb(0, 0, 0);">,
0436: * which is shown in the <code>ui:table</code> tag documentation. </span><a
0437: * href="tableRowGroup.html#UtilityClasses" style="color: rgb(0, 0, 0);">Utility
0438: * classes</a><span style="color: rgb(0, 0, 0);"> used in the examples are
0439: * included
0440: * in this <code>ui:tableRowGroup</code> page, after the examples.
0441: * Additional examples are shown in the </span><code
0442: * style="color: rgb(0, 0, 0);"><a href="table.html#Examples">ui:table</a></code><span
0443: * style="color: rgb(0, 0, 0);">
0444: * and </span><code style="color: rgb(0, 0, 0);"><a
0445: * href="tableColumn.html">ui:tableColumn</a></code><span
0446: * style="color: rgb(0, 0, 0);">
0447: * documents.</span><br style="color: rgb(0, 0, 0);">
0448: * <br style="color: rgb(0, 0, 0);">
0449: * <span style="font-weight: bold; color: rgb(0, 0, 0);">Examples in
0450: * this file:<br>
0451: * <br>
0452: * </span>
0453: * <div style="margin-left: 40px; color: rgb(0, 0, 0);"><a
0454: * href="#GroupTable">Example 1: Group Table</a><br>
0455: * <p><a href="#DynamicTable">Example 2: Dynamic Table</a><br>
0456: * </p>
0457: * <p><a href="#DynamicGroupTable">Example 3: Dynamic Group Table</a><br>
0458: * </p>
0459: * </div>
0460: * <span style="font-weight: bold; color: rgb(0, 0, 0);">
0461: * </span>
0462: * <p style="font-weight: bold; color: rgb(0, 0, 0);">Supporting
0463: * files:</p>
0464: * <div style="margin-left: 40px; color: rgb(0, 0, 0);">
0465: * <p><a href="table.html#Example:_TableBean_">TableBean
0466: * backing bean in <code>ui:table</code> documentation<br>
0467: * </a></p>
0468: * <p><a href="tableRowGroup.html#UtilityClasses">Utility
0469: * classes used in the examples</a></p>
0470: * </div>
0471: * <h4><a name="GroupTable"></a>Example 1: Group Table<br>
0472: * </h4>
0473: * <span style="text-decoration: line-through;"></span><span
0474: * style="color: rgb(0, 0, 0);">This example shows how to
0475: * create a group table. A group table contains rows of data that are
0476: * arranged in discrete sections or groups
0477: * within the table. In a
0478: * basic table, each column typically has a header and perhaps a footer.
0479: * However, in a group table, each group of rows can have its own header
0480: * and footer. In addition, a group table can display table column footers
0481: * and
0482: * an overall table footer below all
0483: * data groups. The table column footers are specified in <code>ui:tableColumn</code>
0484: * tags and the overall footer is specified in the <code>ui:table</code>
0485: * tag. See the <a href="#diagram">diagram </a>of the
0486: * table areas. </span><br style="color: rgb(0, 0, 0);">
0487: * <br style="color: rgb(0, 0, 0);">
0488: * <span style="color: rgb(0, 0, 0);">Additional
0489: * attributes should be
0490: * used in the <code>ui:tableColumn</code> tags within each <code>ui:tableRowGroup</code>
0491: * tag to specify
0492: * functionality. For
0493: * example, the <code>selectId</code> and <code>sort</code>
0494: * attributes allow column
0495: * headers to sort on all row groups at once. <br>
0496: * <br>
0497: * The example uses the backing bean called TableBean for the table data.
0498: * See the
0499: * </span><a href="table.html#Example:_TableBean_"
0500: * style="color: rgb(0, 0, 0);">TableBean
0501: * backing bean in <code>ui:table</code> documentation</a><span
0502: * style="color: rgb(0, 0, 0);">.</span><br style="color: rgb(0, 0, 0);">
0503: * <br style="color: rgb(0, 0, 0);">
0504: * <span style="color: rgb(0, 0, 0);">Note: UI guidelines recommend
0505: * that items should not remain selected when they cannot be seen by the
0506: * user. Using the
0507: * <code>com.sun.rave.web.ui.event.TableSelectPhaseListener</code> object
0508: * ensures that rows that are hidden from view are
0509: * deselected because the phase listener clears the table state after the
0510: * rendering phase. Although
0511: * pagination is not used for a group table, the <code>TableSelectPhaseListener</code>
0512: * object is used in this example in the Select util, which is shown in </span><a
0513: * href="table.html#Select.java" style="color: rgb(0, 0, 0);">Select.java
0514: * in the <code>ui:table</code> documentation</a><span
0515: * style="color: rgb(0, 0, 0);">. Also refer to the JavaDoc
0516: * for <code>TableSelectPhaseListener</code> for more information. </span><br
0517: * style="color: rgb(0, 0, 0);">
0518: * <br>
0519: * <code><!-- Group Table --><br>
0520: * <ui:table id="table1"<br>
0521: * clearSortButton="true"<br>
0522: * deselectMultipleButton="true"<br>
0523: * selectMultipleButton="true"<br>
0524: * sortPanelToggleButton="true"<br>
0525: * footerText="Table Footer"><br>
0526: * <br>
0527: * <!-- Title --><br>
0528: * <f:facet name="title"><br>
0529: * <ui:staticText text="Group Table"/><br>
0530: * </f:facet><br>
0531: * <br>
0532: * <ui:tableRowGroup id="rowGroup1"<br>
0533: *
0534: * binding="#{TableBean.groupB.tableRowGroup}"<br>
0535: * footerText="Group Footer"<br>
0536: * headerText="Group Header"<br>
0537: *
0538: * selected="#{TableBean.groupB.select.selectedState}"<br>
0539: * selectMultipleToggleButton="true"<br>
0540: * sourceData="#{TableBean.groupB.names}"<br>
0541: * sourceVar="name"<br>
0542: * groupToggleButton="true"><br>
0543: * <br>
0544: * <ui:tableColumn id="col0"<br>
0545: *
0546: * extraHeaderHtml="nowrap='nowrap'"<br>
0547: *
0548: * extraFooterHtml="nowrap='nowrap'"<br>
0549: *
0550: * extraTableFooterHtml="nowrap='nowrap'"<br>
0551: * footerText="ColFtr"<br>
0552: * selectId="select"<br>
0553: *
0554: * sort="#{TableBean.groupB.select.selectedState}"><br>
0555: * <ui:checkbox id="select"<br>
0556: *
0557: * onClick="setTimeout('initAllRows()', 0)"<br>
0558: *
0559: * selected="#{TableBean.groupB.select.selected}"<br>
0560: *
0561: * selectedValue="#{TableBean.groupB.select.selectedValue}"/><br>
0562: * </ui:tableColumn><br>
0563: * <ui:tableColumn id="col1"<br>
0564: *
0565: * extraHeaderHtml="nowrap='nowrap'"<br>
0566: * alignKey="last"<br>
0567: * footerText="Column Footer"<br>
0568: * headerText="Last Name"<br>
0569: * rowHeader="true"<br>
0570: * sort="last"><br>
0571: * <ui:staticText
0572: * text="#{name.value.last}"/><br>
0573: * </ui:tableColumn><br>
0574: * <ui:tableColumn id="col2"<br>
0575: * alignKey="first"<br>
0576: * footerText="Column Footer"<br>
0577: * headerText="First Name"<br>
0578: * sort="first"><br>
0579: * <ui:staticText
0580: * text="#{name.value.first}"/><br>
0581: * </ui:tableColumn><br>
0582: * </ui:tableRowGroup><br>
0583: * <br>
0584: * <ui:tableRowGroup id="rowGroup2"<br>
0585: *
0586: * binding="#{TableBean.groupC.tableRowGroup}"<br>
0587: * collapsed="true"<br>
0588: *
0589: * selected="#{TableBean.groupC.select.selectedState}"<br>
0590: * selectMultipleToggleButton="true"<br>
0591: * sourceData="#{TableBean.groupC.names}"<br>
0592: * sourceVar="name"<br>
0593: * groupToggleButton="true"><br>
0594: * <br>
0595: * <!-- Row group header --><br>
0596: * <f:facet name="header"><br>
0597: * <ui:panelGroup id="groupHeader"><br>
0598: * <ui:markup tag="span"
0599: * extraAttributes="class='TblGrpLft'"><br>
0600: *
0601: * <ui:staticText styleClass="TblGrpTxt" text="Group Header"/><br>
0602: * </ui:markup><br>
0603: * <ui:markup tag="span"
0604: * extraAttributes="class='TblGrpRt'"><br>
0605: *
0606: * <ui:staticText styleClass="TblGrpMsgTxt" text="Right-Aligned
0607: * Text"/><br>
0608: * </ui:markup><br>
0609: * </ui:panelGroup><br>
0610: * </f:facet><br>
0611: * <br>
0612: * <!-- Row group footer --><br>
0613: * <f:facet name="footer"><br>
0614: * <ui:staticText
0615: * styleClass="TblGrpFtrRowTxt" text="Group Footer"/><br>
0616: * </f:facet><br>
0617: * <br>
0618: * <ui:tableColumn id="col0"<br>
0619: *
0620: * extraHeaderHtml="nowrap='nowrap'"<br>
0621: *
0622: * extraFooterHtml="nowrap='nowrap'"<br>
0623: *
0624: * extraTableFooterHtml="nowrap='nowrap'"<br>
0625: * footerText="ColFtr"<br>
0626: * selectId="select"<br>
0627: *
0628: * sort="#{TableBean.groupC.select.selectedState}"<br>
0629: *
0630: * tableFooterText="TblColFtr"><br>
0631: * <ui:checkbox id="select"<br>
0632: *
0633: * onClick="setTimeout('initAllRows()', 0)"<br>
0634: *
0635: * selected="#{TableBean.groupC.select.selected}"<br>
0636: *
0637: * selectedValue="#{TableBean.groupC.select.selectedValue}"/><br>
0638: * </ui:tableColumn><br>
0639: * <ui:tableColumn id="col1"<br>
0640: * alignKey="last"<br>
0641: * footerText="Column Footer"<br>
0642: * rowHeader="true"<br>
0643: * sort="last"<br>
0644: * tableFooterText="Table
0645: * Column Footer"><br>
0646: * <ui:staticText
0647: * text="#{name.value.last}"/><br>
0648: * </ui:tableColumn><br>
0649: * <ui:tableColumn id="col2"<br>
0650: * alignKey="first"<br>
0651: * footerText="Column Footer"<br>
0652: * sort="first"<br>
0653: * tableFooterText="Table
0654: * Column Footer"><br>
0655: * <ui:staticText
0656: * text="#{name.value.first}"/><br>
0657: * </ui:tableColumn><br>
0658: * </ui:tableRowGroup><br>
0659: * </ui:table></code><br>
0660: * <br>
0661: * <span style="font-weight: bold;">select.js</span><br>
0662: * <br>
0663: * This example shows the contents of the <code>select.js</code><span
0664: * style="font-weight: bold;"> </span>file used in the example above.<br>
0665: * <code><br>
0666: * // Use this function to initialize all rows displayed in the table when
0667: * the<br>
0668: * // state of selected components change (i.e., checkboxes or
0669: * radiobuttons used to<br>
0670: * // de/select rows of the table). This functionality requires the
0671: * selectId <br>
0672: * // property of the tableColumn component to be set.<br>
0673: * // <br>
0674: * // Note: Use setTimeout when invoking this function. This will ensure
0675: * that <br>
0676: * // checkboxes and radiobutton are selected immediately, instead of
0677: * waiting for <br>
0678: * // the onClick event to complete. For example: <br>
0679: * //<br>
0680: * // onClick="setTimeout('initAllRows(); disableActions()', 0)"<br>
0681: * function initAllRows() {<br>
0682: * // Disable table actions by default.<br>
0683: * var table = document.getElementById("form1:table1");<br>
0684: * table.initAllRows();<br>
0685: * }</code><br>
0686: * <h4><a name="DynamicTable"></a>Example 2: Dynamic Table<br>
0687: * </h4>
0688: * <span style="color: rgb(0, 0, 0);">This example shows how to use
0689: * the <code>ui:table</code> tag to create a binding to a backing
0690: * bean to
0691: * dynamically create a table layout. The dynamic table is created as
0692: * needed and can be changed each time the page is rendered. </span><br
0693: * style="color: rgb(0, 0, 0);">
0694: * <br style="color: rgb(0, 0, 0);">
0695: * <code style="color: rgb(0, 0, 0);"><ui:table id="table1"
0696: * binding="#{DynamicTableBean.table}"/><br>
0697: * <br>
0698: * <br>
0699: * </code><span style="color: rgb(0, 0, 0);">The backing bean,
0700: * DynamicTableBean, is
0701: * shown in the following </span><a href="#DynamicTableBean"
0702: * style="color: rgb(0, 0, 0);"><code>DynamicTableBean.java</code></a><span
0703: * style="color: rgb(0, 0, 0);"> class. This bean is used only to
0704: * create the table layout, and shows how to use the tableRowGroup
0705: * component directly
0706: * through Java code instead of through the JSP tag </span><code
0707: * style="color: rgb(0, 0, 0);">ui:tableRowGroup.</code><span
0708: * style="color: rgb(0, 0, 0);"> The <a href="#Dynamic.java">Dynamic.java</a>
0709: * utility class provides the functionality for adding properties to the
0710: * table. The table
0711: * also uses methods that are
0712: * defined in the </span><a href="table.html#Example:_TableBean_"
0713: * style="color: rgb(0, 0, 0);">TableBean
0714: * shown in the <code>ui:table</code> documentation</a><span
0715: * style="color: rgb(0, 0, 0);">.</span><br>
0716: * <h4><code style="color: rgb(102, 102, 204);"><a name="DynamicTableBean"></a><span
0717: * style="color: rgb(0, 0, 0);"></span></code><span
0718: * style="color: rgb(0, 0, 0);">DynamicTableBean.java Backing Bean</span><br>
0719: * </h4>
0720: * <h4><code style="font-weight: normal;">package table;<br>
0721: * <br>
0722: * import com.sun.rave.web.ui.component.Table;<br>
0723: * import com.sun.rave.web.ui.component.TableRowGroup;<br>
0724: * <br>
0725: * import table.util.Dynamic;<br>
0726: * <br>
0727: * // Backing bean for dynamic table examples.<br>
0728: * //<br>
0729: * // Note: To simplify the example, this bean is used only to create the
0730: * table <br>
0731: * // layout. The resulting table will use methods already defined in
0732: * TableBean.<br>
0733: * public class DynamicTableBean {<br>
0734: * private Dynamic dynamic = null; // Dynamic util.<br>
0735: * private Table table = null; // Table component.<br>
0736: * <br>
0737: * // Default constructor.<br>
0738: * public DynamicTableBean() {<br>
0739: * dynamic = new Dynamic();<br>
0740: * }<br>
0741: * <br>
0742: * // Get Table component.<br>
0743: * public Table getTable() {<br>
0744: * if (table == null) {<br>
0745: * //
0746: * Get table row group.<br>
0747: *
0748: * TableRowGroup rowGroup1 = dynamic.getTableRowGroup("rowGroup1",<br>
0749: *
0750: * "#{TableBean.groupB.names}",<br>
0751: *
0752: * "#{TableBean.groupB.select.selectedState}", null);<br>
0753: * <br>
0754: * //
0755: * Set table row group properties.<br>
0756: *
0757: * dynamic.setTableRowGroupChildren(rowGroup1,<br>
0758: *
0759: * "#{TableBean.groupB.select.selectedState}",<br>
0760: *
0761: * "#{TableBean.groupB.select.selected}",<br>
0762: *
0763: * "#{TableBean.groupB.select.selectedValue}",<br>
0764: *
0765: * "#{TableBean.groupB.actions.action}", true);<br>
0766: * <br>
0767: * //
0768: * Get table.<br>
0769: *
0770: * table = dynamic.getTable("table1", "Dynamic Table");<br>
0771: *
0772: * table.getChildren().add(rowGroup1);<br>
0773: * }<br>
0774: * return table;<br>
0775: * }<br>
0776: * <br>
0777: * // Set Table component.<br>
0778: * //<br>
0779: * // @param table The Table component.<br>
0780: * public void setTable(Table table) {<br>
0781: * this.table = table;<br>
0782: * }<br>
0783: * }</code><br>
0784: * </h4>
0785: * <code>
0786: * </code>
0787: * <h4><a name="DynamicGroupTable"></a>Example 3: Dynamic Group Table<br>
0788: * </h4>
0789: * This example shows how to<span style="color: rgb(0, 0, 0);"> use
0790: * the <code>ui:table</code> tag to create a binding to a backing
0791: * bean to
0792: * dynamically create a group table layout. </span><span
0793: * style="text-decoration: line-through; color: rgb(0, 0, 0);"></span><span
0794: * style="color: rgb(0, 0, 0);">The dynamic group table is created
0795: * as
0796: * needed and can be changed each time the page is rendered.</span><br
0797: * style="color: rgb(0, 0, 0);">
0798: * <br style="color: rgb(0, 0, 0);">
0799: * <code style="color: rgb(0, 0, 0);"><ui:table id="table1"
0800: * binding="#{DynamicGroupTableBean.table}"/><br>
0801: * <br>
0802: * </code><span style="color: rgb(0, 0, 0);">The backing bean,
0803: * DynamicGroupTableBean, is
0804: * shown in the following </span><a href="#DynamicGroupTableBean"
0805: * style="color: rgb(0, 0, 0);"><code>DynamicGroupTableBean.java</code></a><span
0806: * style="color: rgb(0, 0, 0);"> class. This bean is used only to
0807: * create the table layout, and shows how to use the tableRowGroup
0808: * component directly
0809: * through Java code instead of through the JSP tag </span><code
0810: * style="color: rgb(0, 0, 0);">ui:tableRowGroup.</code><span
0811: * style="color: rgb(0, 0, 0);"> The <code><a
0812: * href="tableRowGroup.html#Dynamic.java">Dynamic.java</a></code>
0813: * utility
0814: * class provides the functionality for adding
0815: * properties to the table. The table also
0816: * uses methods that are
0817: * defined in the </span><a href="table.html#Example:_TableBean_"
0818: * style="color: rgb(0, 0, 0);">TableBean
0819: * shown in the <code>ui:table</code> documentation</a><span
0820: * style="color: rgb(0, 0, 0);">.</span><br>
0821: * <h4><code style="color: rgb(102, 102, 204);"><a
0822: * name="DynamicGroupTableBean"></a><span style="color: rgb(0, 0, 0);"></span></code><span
0823: * style="color: rgb(0, 0, 0);">DynamicGroupTableBean.java Backing Bean</span></h4>
0824: * <code>package table;<br>
0825: * <br>
0826: * import table.util.Dynamic;<br>
0827: * <br>
0828: * import com.sun.rave.web.ui.component.StaticText;<br>
0829: * import com.sun.rave.web.ui.component.Table;<br>
0830: * import com.sun.rave.web.ui.component.TableRowGroup;<br>
0831: * <br>
0832: * // Backing bean for dynamic group table examples.<br>
0833: * //<br>
0834: * // Note: To simplify the example, this bean is used only to create the
0835: * table <br>
0836: * // layout. The resulting table will use methods already defined in
0837: * TableBean.<br>
0838: * public class DynamicGroupTableBean {<br>
0839: * private Dynamic dynamic = null; // Dynamic util.<br>
0840: * private Table table = null; // Table component.<br>
0841: * <br>
0842: * // Default constructor.<br>
0843: * public DynamicGroupTableBean() {<br>
0844: * dynamic = new Dynamic();<br>
0845: * }<br>
0846: * <br>
0847: * // Get Table component.<br>
0848: * public Table getTable() {<br>
0849: * if (table == null) {<br>
0850: * //
0851: * Get table row group.<br>
0852: *
0853: * TableRowGroup rowGroup1 = dynamic.getTableRowGroup("rowGroup1",<br>
0854: *
0855: * "#{TableBean.groupB.names}",<br>
0856: *
0857: * "#{TableBean.groupB.select.selectedState}",<br>
0858: *
0859: * "Group Header");<br>
0860: *
0861: * TableRowGroup rowGroup2 = dynamic.getTableRowGroup("rowGroup2",<br>
0862: *
0863: * "#{TableBean.groupC.names}",<br>
0864: *
0865: * "#{TableBean.groupC.select.selectedState}",<br>
0866: *
0867: * "Group Header");<br>
0868: * <br>
0869: * //
0870: * Set table row group properties.<br>
0871: *
0872: * dynamic.setTableRowGroupChildren(rowGroup1, <br>
0873: *
0874: * "#{TableBean.groupB.select.selectedState}", <br>
0875: *
0876: * "#{TableBean.groupB.select.selected}",<br>
0877: *
0878: * "#{TableBean.groupB.select.selectedValue}", null, true);<br>
0879: *
0880: * dynamic.setTableRowGroupChildren(rowGroup2, <br>
0881: *
0882: * "#{TableBean.groupC.select.selectedState}", <br>
0883: *
0884: * "#{TableBean.groupC.select.selected}",<br>
0885: *
0886: * "#{TableBean.groupC.select.selectedValue}", null, false);<br>
0887: * <br>
0888: * //
0889: * Set select and row group toggle buttons.<br>
0890: *
0891: * rowGroup1.setSelectMultipleToggleButton(true); <br>
0892: *
0893: * rowGroup2.setSelectMultipleToggleButton(true); <br>
0894: *
0895: * rowGroup1.setGroupToggleButton(true);<br>
0896: *
0897: * rowGroup2.setGroupToggleButton(true);<br>
0898: * <br>
0899: * //
0900: * Get table.<br>
0901: *
0902: * table = dynamic.getTable("table1", null);<br>
0903: *
0904: * table.getChildren().add(rowGroup1);<br>
0905: *
0906: * table.getChildren().add(rowGroup2);<br>
0907: * <br>
0908: * //
0909: * Add title facet.<br>
0910: *
0911: * StaticText title = new StaticText();<br>
0912: *
0913: * title.setText("Dynamic Group Table");<br>
0914: *
0915: * table.getFacets().put(Table.TITLE_FACET, title);<br>
0916: * }<br>
0917: * return table;<br>
0918: * }<br>
0919: * <br>
0920: * // Set Table component. <br>
0921: * //<br>
0922: * // @param table The Table component.<br>
0923: * public void setTable(Table table) {<br>
0924: * this.table = table;<br>
0925: * }<br>
0926: * }</code><br>
0927: * <h3 style="color: rgb(0, 0, 0);">faces_config.xml Entry for
0928: * Managed Beans</h3>
0929: * The examples are based on managed beans, such as the example
0930: * below, added to the
0931: * <code>faces_config.xml</code> file.<br>
0932: * <span style="color: rgb(255, 153, 0);"><br>
0933: * </span><code><!DOCTYPE faces-config PUBLIC <br>
0934: * '-//Sun Microsystems, Inc.//DTD JavaServer Faces
0935: * Config 1.0//EN' <br>
0936: * 'http://java.sun.com/dtd/web-facesconfig_1_1.dtd'><br>
0937: * <br>
0938: * <faces-config><br>
0939: * <managed-bean><br>
0940: * <description>Backing
0941: * bean for the group table example</description><br>
0942: *
0943: * <managed-bean-name>TableBean</managed-bean-name><br>
0944: *
0945: * <managed-bean-class>table.TableBean</managed-bean-class><br>
0946: *
0947: * <managed-bean-scope>session</managed-bean-scope><br>
0948: * </managed-bean><br>
0949: * <br>
0950: * <managed-bean><br>
0951: * <description>Backing
0952: * bean for the dynamic table example</description><br>
0953: *
0954: * <managed-bean-name>DynamicTableBean</managed-bean-name><br>
0955: *
0956: * <managed-bean-class>table.DynamicTableBean</managed-bean-class><br>
0957: *
0958: * <managed-bean-scope>session</managed-bean-scope><br>
0959: * </managed-bean><br>
0960: * <br>
0961: * <managed-bean><br>
0962: * <description>Backing
0963: * bean for the dynamic group table example</description><br>
0964: *
0965: * <managed-bean-name>DynamicGroupTableBean</managed-bean-name><br>
0966: *
0967: * <managed-bean-class>table.DynamicGroupTableBean</managed-bean-class><br>
0968: *
0969: * <managed-bean-scope>session</managed-bean-scope><br>
0970: * </managed-bean><br>
0971: * </faces-config></code><br>
0972: * <h3><a name="UtilityClasses"></a>Utility Classes used in the examples</h3>
0973: * The following utility class is used in the group table
0974: * examples shown in this page.<br>
0975: * <p><a href="table.html#Group.java"><code></code></a></p>
0976: * <a href="tableRowGroup.html#Dynamic.java">Dynamic.java</a><br>
0977: * <br>
0978: * The following utility classes are shown in the <code>ui:table</code>
0979: * documentation, and used in the examples for the table
0980: * tags<code> ui:table</code>, <code>ui:tableRowGroup</code>, and <code>ui:tableColumn.<br>
0981: * </code><br>
0982: * <code></code><a href="table.html#Group.java">Group.java
0983: * </a><br>
0984: * <a href="table.html#Name.java">Name.java
0985: * </a><a href="table.html#Group.java"><code></code></a><br>
0986: * <a href="table.html#Select.java">Select.java
0987: * </a><br>
0988: * <h4><a name="Dynamic.java"></a><span style="color: rgb(0, 0, 0);">Dynamic.java
0989: * Utility Class</span><br>
0990: * </h4>
0991: * <code>package table.util;<br>
0992: * <br>
0993: * import com.sun.rave.web.ui.component.Checkbox;<br>
0994: * import com.sun.rave.web.ui.component.Hyperlink;<br>
0995: * import com.sun.rave.web.ui.component.StaticText;<br>
0996: * import com.sun.rave.web.ui.component.Table;<br>
0997: * import com.sun.rave.web.ui.component.TableColumn;<br>
0998: * import com.sun.rave.web.ui.component.TableRowGroup;<br>
0999: * <br>
1000: * import javax.faces.context.FacesContext;<br>
1001: * import javax.faces.component.UIComponent;<br>
1002: * import javax.faces.component.UIParameter;<br>
1003: * import javax.faces.el.ValueBinding;<br>
1004: * <br>
1005: * // This class provides functionality for dynamic tables.<br>
1006: * public class Dynamic {<br>
1007: * public static final String CHECKBOX_ID = "select";<br>
1008: * public static final String HYPERLINK_ID = "link";<br>
1009: * <br>
1010: * // Default constructor.<br>
1011: * public Dynamic() {<br>
1012: * }<br>
1013: * <br>
1014: * // Note: When using tags in a JSP page,
1015: * UIComponentTag automatically creates<br>
1016: * // a unique id for the component. However, when
1017: * dynamically creating <br>
1018: * // components, via a backing bean, the id has not
1019: * been set. In this <br>
1020: * // scenario, allowing JSF to create unique Ids may
1021: * cause problems with<br>
1022: * // Javascript and components may not be able to
1023: * maintain state properly. <br>
1024: * // For example, if a component was assigned "_id6"
1025: * as an id, that means <br>
1026: * // there were 5 other components that also have
1027: * auto-generated ids. Let us <br>
1028: * // assume one of those components was a complex
1029: * component that, as part of <br>
1030: * // its processing, adds an additional non-id'd child
1031: * before redisplaying the<br>
1032: * // view. Now, the id of this component will be
1033: * "_id7" instead of "_id6". <br>
1034: * // Assigning your own id ensures that conflicts do
1035: * not occur.<br>
1036: * <br>
1037: * // Get Table component. <br>
1038: * //<br>
1039: * // @param id The component id.<br>
1040: * // @param title The table title text.<br>
1041: * public Table getTable(String id, String title) {<br>
1042: * // Get table.<br>
1043: * Table table = new Table();<br>
1044: *
1045: * table.setDeselectMultipleButton(true); // Show deselect multiple button.<br>
1046: *
1047: * table.setSelectMultipleButton(true); // Show select multiple button.<br>
1048: * table.setTitle(title); //
1049: * Set title text.<br>
1050: * <br>
1051: * return table;<br>
1052: * }<br>
1053: * <br>
1054: * // Get TableRowGroup component with header.<br>
1055: * //<br>
1056: * // @param id The component id.<br>
1057: * // @param sourceData Value binding expression for
1058: * model data.<br>
1059: * // @param selected Value binding expression for
1060: * selected property.<br>
1061: * // @param header Value binding expression for row
1062: * group header text.<br>
1063: * public TableRowGroup getTableRowGroup(String id,
1064: * String sourceData,<br>
1065: *
1066: * String selected, String header) {<br>
1067: * // Get table row group.<br>
1068: * TableRowGroup rowGroup = new
1069: * TableRowGroup();<br>
1070: * rowGroup.setId(id); // Set
1071: * id.<br>
1072: *
1073: * rowGroup.setSourceVar("name"); // Set source var.<br>
1074: *
1075: * rowGroup.setHeaderText(header); // Set header text.<br>
1076: * setValueBinding(rowGroup,
1077: * "selected", selected); // Set row highlight.<br>
1078: * setValueBinding(rowGroup,
1079: * "sourceData", sourceData); // Set source data.<br>
1080: * <br>
1081: * return rowGroup;<br>
1082: * }<br>
1083: * <br>
1084: * // Get TableColumn component.<br>
1085: * //<br>
1086: * // @param id The component id.<br>
1087: * // @param sort Value binding expression for column
1088: * sort.<br>
1089: * // @param align The field key for column alignment.<br>
1090: * // @param header The column header text.<br>
1091: * // @param selectId The component id used to select
1092: * table rows.<br>
1093: * public TableColumn getTableColumn(String id, String
1094: * sort, String align,<br>
1095: *
1096: * String header, String selectId) {<br>
1097: * // Get table column.<br>
1098: * TableColumn col = new
1099: * TableColumn();<br>
1100: * col.setId(id); // Set id.<br>
1101: * col.setSelectId(selectId);
1102: * // Set id used to select table rows.<br>
1103: * col.setHeaderText(header);
1104: * // Set header text.<br>
1105: * col.setAlignKey(align); //
1106: * Set align key.<br>
1107: * setValueBinding(col, "sort",
1108: * sort); // Set sort.<br>
1109: * <br>
1110: * return col;<br>
1111: * }<br>
1112: * <br>
1113: * // Get Checkbox component used for select column.<br>
1114: * //<br>
1115: * // @param id The component id.<br>
1116: * // @param selected Value binding expression for
1117: * selected property.<br>
1118: * // @param selectedValue Value binding expression for
1119: * selectedValue property.<br>
1120: * public Checkbox getCheckbox(String id, String
1121: * selected, <br>
1122: *
1123: * String selectedValue) {<br>
1124: * // Get checkbox.<br>
1125: * Checkbox cb = new Checkbox();<br>
1126: * cb.setId(id); // Set id here
1127: * and set row highlighting below.<br>
1128: *
1129: * cb.setOnClick("setTimeout('initAllRows()', 0)");<br>
1130: * setValueBinding(cb,
1131: * "selected", selected); // Set selected.<br>
1132: * setValueBinding(cb,
1133: * "selectedValue", selectedValue); // Set selected value.<br>
1134: * <br>
1135: * return cb;<br>
1136: * }<br>
1137: * <br>
1138: * // Get Hyperlink component.<br>
1139: * //<br>
1140: * // @param id The component id.<br>
1141: * // @param text Value binding expression for text.<br>
1142: * // @param action Method binding expression for
1143: * action.<br>
1144: * // @param parameter Value binding expression for
1145: * parameter.<br>
1146: * public Hyperlink getHyperlink(String id, String
1147: * text, String action,<br>
1148: *
1149: * String parameter) {<br>
1150: * // Get hyperlink.<br>
1151: * Hyperlink hyperlink = new
1152: * Hyperlink();<br>
1153: * hyperlink.setId(id); // Set
1154: * id.<br>
1155: * setValueBinding(hyperlink,
1156: * "text", text); // Set text.<br>
1157: * setMethodBinding(hyperlink,
1158: * "action", action); // Set action.<br>
1159: * <br>
1160: * // Create paramerter.<br>
1161: * UIParameter param = new
1162: * UIParameter();<br>
1163: * param.setId(id + "_param");<br>
1164: * param.setName("param");<br>
1165: * setValueBinding(param,
1166: * "value", parameter); // Set parameter.<br>
1167: *
1168: * hyperlink.getChildren().add(param);<br>
1169: * <br>
1170: * return hyperlink;<br>
1171: * }<br>
1172: * <br>
1173: * // Get StaticText component.<br>
1174: * //<br>
1175: * // @param text Value binding expression for text.<br>
1176: * public StaticText getText(String text) {<br>
1177: * // Get static text.<br>
1178: * StaticText staticText = new
1179: * StaticText();<br>
1180: * setValueBinding(staticText,
1181: * "text", text); // Set text.<br>
1182: * <br>
1183: * return staticText;<br>
1184: * }<br>
1185: * <br>
1186: * // Set TableRowGroup children.<br>
1187: * //<br>
1188: * // @param rowGroup The TableRowGroup component.<br>
1189: * // @param cbSort Value binding expression for cb
1190: * sort.<br>
1191: * // @param cbSelected Value binding expression for cb
1192: * selected property.<br>
1193: * // @param cbSelectedValue Value binding expression
1194: * for cb selectedValue property.<br>
1195: * // @param action The Method binding expression for
1196: * hyperlink action.<br>
1197: * // @param showHeader Flag indicating to display
1198: * column header text.<br>
1199: * public void setTableRowGroupChildren(TableRowGroup
1200: * rowGroup, String cbSort,<br>
1201: * String cbSelected, String
1202: * cbSelectedValue, String action,<br>
1203: *
1204: * boolean showHeader) {<br>
1205: * // UI guidelines recomend no
1206: * headers for second row group.<br>
1207: * String header1 = showHeader
1208: * ? "Last Name" : null;<br>
1209: * String header2 = showHeader
1210: * ? "First Name" : null;<br>
1211: * <br>
1212: * // Get columns.<br>
1213: * TableColumn col1 =
1214: * getTableColumn(<br>
1215: *
1216: * "col0", cbSort, null, null, CHECKBOX_ID);<br>
1217: * TableColumn col2 =
1218: * getTableColumn(<br>
1219: *
1220: * "col1", "#{name.value.last}", "last", header1,
1221: * null);
1222: * <br>
1223: * TableColumn col3 =
1224: * getTableColumn(<br>
1225: *
1226: * "col2", "#{name.value.first}", "first", header2, null);<br>
1227: * <br>
1228: * // Get column components.<br>
1229: * Checkbox cb =
1230: * getCheckbox(CHECKBOX_ID, cbSelected, cbSelectedValue);<br>
1231: * StaticText firstName =
1232: * getText("#{name.value.first}");<br>
1233: * <br>
1234: * // If action was provided,
1235: * add a hyperlink; otherwise, use static text.<br>
1236: * if (action != null) {<br>
1237: *
1238: * Hyperlink lastName = getHyperlink(HYPERLINK_ID, <br>
1239: *
1240: * "#{name.value.last}", action,<br>
1241: *
1242: * "#{name.value.last}");<br>
1243: *
1244: * col2.getChildren().add(lastName);<br>
1245: * } else {<br>
1246: *
1247: * StaticText lastName = getText("#{name.value.last}");<br>
1248: *
1249: * col2.getChildren().add(lastName);<br>
1250: * }<br>
1251: * <br>
1252: * // Add Children.<br>
1253: * col1.getChildren().add(cb);<br>
1254: *
1255: * col3.getChildren().add(firstName);<br>
1256: *
1257: * rowGroup.getChildren().add(col1);<br>
1258: *
1259: * rowGroup.getChildren().add(col2);<br>
1260: *
1261: * rowGroup.getChildren().add(col3);<br>
1262: * }<br>
1263: * <br>
1264: * // Helper method to set value bindings.<br>
1265: * //<br>
1266: * // @param component The UIComponent to set a value
1267: * binding for.<br>
1268: * // @param name The name of the value binding.<br>
1269: * // @param value The value of the value binding.<br>
1270: * protected void setValueBinding(UIComponent
1271: * component, String name, <br>
1272: *
1273: * String value) {<br>
1274: * if (value == null) {<br>
1275: *
1276: * return;<br>
1277: * }<br>
1278: * FacesContext context =
1279: * FacesContext.getCurrentInstance();<br>
1280: *
1281: * component.setValueBinding(name, context.getApplication().<br>
1282: *
1283: * createValueBinding(value));<br>
1284: * }<br>
1285: * <br>
1286: * // Helper method to set method bindings.<br>
1287: * //<br>
1288: * // @param component The UIComponent to set a value
1289: * binding for.<br>
1290: * // @param name The name of the method binding.<br>
1291: * // @param action The action of the method binding.<br>
1292: * protected void setMethodBinding(UIComponent
1293: * component, String name,<br>
1294: *
1295: * String action) {<br>
1296: * if (action == null) {<br>
1297: *
1298: * return;<br>
1299: * }<br>
1300: * FacesContext context =
1301: * FacesContext.getCurrentInstance();<br>
1302: *
1303: * component.getAttributes().put(name, context.getApplication().<br>
1304: *
1305: * createMethodBinding(action, new Class[0]));<br>
1306: * }<br>
1307: * }</code><br>
1308: * <br>
1309: * <p>Auto-generated component class.
1310: * Do <strong>NOT</strong> modify; all changes
1311: * <strong>will</strong> be lost!</p>
1312: */
1313:
1314: public abstract class TableRowGroupBase extends
1315: javax.faces.component.UIComponentBase {
1316:
1317: /**
1318: * <p>Construct a new <code>TableRowGroupBase</code>.</p>
1319: */
1320: public TableRowGroupBase() {
1321: super ();
1322: setRendererType("com.sun.rave.web.ui.TableRowGroup");
1323: }
1324:
1325: /**
1326: * <p>Return the identifier of the component family to which this
1327: * component belongs. This identifier, in conjunction with the value
1328: * of the <code>rendererType</code> property, may be used to select
1329: * the appropriate {@link Renderer} for this component instance.</p>
1330: */
1331: public String getFamily() {
1332: return "com.sun.rave.web.ui.TableRowGroup";
1333: }
1334:
1335: // aboveColumnFooter
1336: private boolean aboveColumnFooter = false;
1337: private boolean aboveColumnFooter_set = false;
1338:
1339: /**
1340: * <p>Set the <code>aboveColumnFooter</code> attribute to true to display the group
1341: * footer bar above the column footers bar. The default is to display the group
1342: * footer below the column footers.</p>
1343: */
1344: public boolean isAboveColumnFooter() {
1345: if (this .aboveColumnFooter_set) {
1346: return this .aboveColumnFooter;
1347: }
1348: ValueBinding _vb = getValueBinding("aboveColumnFooter");
1349: if (_vb != null) {
1350: Object _result = _vb.getValue(getFacesContext());
1351: if (_result == null) {
1352: return false;
1353: } else {
1354: return ((Boolean) _result).booleanValue();
1355: }
1356: }
1357: return false;
1358: }
1359:
1360: /**
1361: * <p>Set the <code>aboveColumnFooter</code> attribute to true to display the group
1362: * footer bar above the column footers bar. The default is to display the group
1363: * footer below the column footers.</p>
1364: * @see #isAboveColumnFooter()
1365: */
1366: public void setAboveColumnFooter(boolean aboveColumnFooter) {
1367: this .aboveColumnFooter = aboveColumnFooter;
1368: this .aboveColumnFooter_set = true;
1369: }
1370:
1371: // aboveColumnHeader
1372: private boolean aboveColumnHeader = false;
1373: private boolean aboveColumnHeader_set = false;
1374:
1375: /**
1376: * <p>Set the <code>aboveColumnHeader</code> attribute to true to display the group
1377: * header bar above the column headers bar. The default is to display the group
1378: * header below the column headers.</p>
1379: */
1380: public boolean isAboveColumnHeader() {
1381: if (this .aboveColumnHeader_set) {
1382: return this .aboveColumnHeader;
1383: }
1384: ValueBinding _vb = getValueBinding("aboveColumnHeader");
1385: if (_vb != null) {
1386: Object _result = _vb.getValue(getFacesContext());
1387: if (_result == null) {
1388: return false;
1389: } else {
1390: return ((Boolean) _result).booleanValue();
1391: }
1392: }
1393: return false;
1394: }
1395:
1396: /**
1397: * <p>Set the <code>aboveColumnHeader</code> attribute to true to display the group
1398: * header bar above the column headers bar. The default is to display the group
1399: * header below the column headers.</p>
1400: * @see #isAboveColumnHeader()
1401: */
1402: public void setAboveColumnHeader(boolean aboveColumnHeader) {
1403: this .aboveColumnHeader = aboveColumnHeader;
1404: this .aboveColumnHeader_set = true;
1405: }
1406:
1407: // align
1408: private String align = null;
1409:
1410: /**
1411: * <p>Sets the horizontal alignment (left, right, justify, center) for the cell contents</p>
1412: */
1413: public String getAlign() {
1414: if (this .align != null) {
1415: return this .align;
1416: }
1417: ValueBinding _vb = getValueBinding("align");
1418: if (_vb != null) {
1419: return (String) _vb.getValue(getFacesContext());
1420: }
1421: return null;
1422: }
1423:
1424: /**
1425: * <p>Sets the horizontal alignment (left, right, justify, center) for the cell contents</p>
1426: * @see #getAlign()
1427: */
1428: public void setAlign(String align) {
1429: this .align = align;
1430: }
1431:
1432: // bgColor
1433: private String bgColor = null;
1434:
1435: public String getBgColor() {
1436: if (this .bgColor != null) {
1437: return this .bgColor;
1438: }
1439: ValueBinding _vb = getValueBinding("bgColor");
1440: if (_vb != null) {
1441: return (String) _vb.getValue(getFacesContext());
1442: }
1443: return null;
1444: }
1445:
1446: public void setBgColor(String bgColor) {
1447: this .bgColor = bgColor;
1448: }
1449:
1450: // char
1451: private String _char = null;
1452:
1453: public String getChar() {
1454: if (this ._char != null) {
1455: return this ._char;
1456: }
1457: ValueBinding _vb = getValueBinding("char");
1458: if (_vb != null) {
1459: return (String) _vb.getValue(getFacesContext());
1460: }
1461: return null;
1462: }
1463:
1464: public void setChar(String _char) {
1465: this ._char = _char;
1466: }
1467:
1468: // charOff
1469: private String charOff = null;
1470:
1471: public String getCharOff() {
1472: if (this .charOff != null) {
1473: return this .charOff;
1474: }
1475: ValueBinding _vb = getValueBinding("charOff");
1476: if (_vb != null) {
1477: return (String) _vb.getValue(getFacesContext());
1478: }
1479: return null;
1480: }
1481:
1482: public void setCharOff(String charOff) {
1483: this .charOff = charOff;
1484: }
1485:
1486: // collapsed
1487: private boolean collapsed = false;
1488: private boolean collapsed_set = false;
1489:
1490: /**
1491: * <p>Use the collapsed attribute to initially render the group as collapsed, so that
1492: * the data rows are hidden and only the header row is visible. The default is to
1493: * show the group expanded.</p>
1494: */
1495: public boolean isCollapsed() {
1496: if (this .collapsed_set) {
1497: return this .collapsed;
1498: }
1499: ValueBinding _vb = getValueBinding("collapsed");
1500: if (_vb != null) {
1501: Object _result = _vb.getValue(getFacesContext());
1502: if (_result == null) {
1503: return false;
1504: } else {
1505: return ((Boolean) _result).booleanValue();
1506: }
1507: }
1508: return false;
1509: }
1510:
1511: /**
1512: * <p>Use the collapsed attribute to initially render the group as collapsed, so that
1513: * the data rows are hidden and only the header row is visible. The default is to
1514: * show the group expanded.</p>
1515: * @see #isCollapsed()
1516: */
1517: public void setCollapsed(boolean collapsed) {
1518: this .collapsed = collapsed;
1519: this .collapsed_set = true;
1520: }
1521:
1522: // emptyDataMsg
1523: private String emptyDataMsg = null;
1524:
1525: /**
1526: * <p>The text to be displayed when the table does not contain data. The text is
1527: * displayed left-aligned in a single row that contains one cell that spans all
1528: * columns. The <code>emptyDataMsg</code> text might be something similar to "No
1529: * items found." If users can add items to the table, the message might include
1530: * instructions, such as "This table contains no files. To add a file to monitor,
1531: * click the New button."</p>
1532: */
1533: public String getEmptyDataMsg() {
1534: if (this .emptyDataMsg != null) {
1535: return this .emptyDataMsg;
1536: }
1537: ValueBinding _vb = getValueBinding("emptyDataMsg");
1538: if (_vb != null) {
1539: return (String) _vb.getValue(getFacesContext());
1540: }
1541: return null;
1542: }
1543:
1544: /**
1545: * <p>The text to be displayed when the table does not contain data. The text is
1546: * displayed left-aligned in a single row that contains one cell that spans all
1547: * columns. The <code>emptyDataMsg</code> text might be something similar to "No
1548: * items found." If users can add items to the table, the message might include
1549: * instructions, such as "This table contains no files. To add a file to monitor,
1550: * click the New button."</p>
1551: * @see #getEmptyDataMsg()
1552: */
1553: public void setEmptyDataMsg(String emptyDataMsg) {
1554: this .emptyDataMsg = emptyDataMsg;
1555: }
1556:
1557: // extraFooterHtml
1558: private String extraFooterHtml = null;
1559:
1560: /**
1561: * <p>Extra HTML code to be appended to the <code><tr></code> HTML element that
1562: * is rendered for the group footer. Use only code that is valid in an HTML
1563: * <code><td></code> element. The code you specify is inserted in the HTML
1564: * element, and is not checked for validity. For example, you might set this
1565: * attribute to <code>"nowrap=`nowrap'"</code>.</p>
1566: */
1567: public String getExtraFooterHtml() {
1568: if (this .extraFooterHtml != null) {
1569: return this .extraFooterHtml;
1570: }
1571: ValueBinding _vb = getValueBinding("extraFooterHtml");
1572: if (_vb != null) {
1573: return (String) _vb.getValue(getFacesContext());
1574: }
1575: return null;
1576: }
1577:
1578: /**
1579: * <p>Extra HTML code to be appended to the <code><tr></code> HTML element that
1580: * is rendered for the group footer. Use only code that is valid in an HTML
1581: * <code><td></code> element. The code you specify is inserted in the HTML
1582: * element, and is not checked for validity. For example, you might set this
1583: * attribute to <code>"nowrap=`nowrap'"</code>.</p>
1584: * @see #getExtraFooterHtml()
1585: */
1586: public void setExtraFooterHtml(String extraFooterHtml) {
1587: this .extraFooterHtml = extraFooterHtml;
1588: }
1589:
1590: // extraHeaderHtml
1591: private String extraHeaderHtml = null;
1592:
1593: /**
1594: * <p>Extra HTML code to be appended to the <code><tr></code> HTML element that
1595: * is rendered for the group header. Use only code that is valid in an HTML
1596: * <code><td></code> element. The code you specify is inserted in the HTML
1597: * element, and is not checked for validity. For example, you might set this
1598: * attribute to <code>"nowrap=`nowrap'"</code>.</p>
1599: */
1600: public String getExtraHeaderHtml() {
1601: if (this .extraHeaderHtml != null) {
1602: return this .extraHeaderHtml;
1603: }
1604: ValueBinding _vb = getValueBinding("extraHeaderHtml");
1605: if (_vb != null) {
1606: return (String) _vb.getValue(getFacesContext());
1607: }
1608: return null;
1609: }
1610:
1611: /**
1612: * <p>Extra HTML code to be appended to the <code><tr></code> HTML element that
1613: * is rendered for the group header. Use only code that is valid in an HTML
1614: * <code><td></code> element. The code you specify is inserted in the HTML
1615: * element, and is not checked for validity. For example, you might set this
1616: * attribute to <code>"nowrap=`nowrap'"</code>.</p>
1617: * @see #getExtraHeaderHtml()
1618: */
1619: public void setExtraHeaderHtml(String extraHeaderHtml) {
1620: this .extraHeaderHtml = extraHeaderHtml;
1621: }
1622:
1623: // first
1624: private int first = Integer.MIN_VALUE;
1625: private boolean first_set = false;
1626:
1627: /**
1628: * <p>Use the <code>first</code> attribute to specify which row should be the first
1629: * to be displayed. This value is used only when the table is paginated. By
1630: * default, the first row (0) is displayed first. The value of this property is
1631: * maintained as part of the table's state, and the value is updated when the user
1632: * clicks on buttons to page through the table.</p>
1633: */
1634: public int getFirst() {
1635: if (this .first_set) {
1636: return this .first;
1637: }
1638: ValueBinding _vb = getValueBinding("first");
1639: if (_vb != null) {
1640: Object _result = _vb.getValue(getFacesContext());
1641: if (_result == null) {
1642: return Integer.MIN_VALUE;
1643: } else {
1644: return ((Integer) _result).intValue();
1645: }
1646: }
1647: return 0;
1648: }
1649:
1650: /**
1651: * <p>Use the <code>first</code> attribute to specify which row should be the first
1652: * to be displayed. This value is used only when the table is paginated. By
1653: * default, the first row (0) is displayed first. The value of this property is
1654: * maintained as part of the table's state, and the value is updated when the user
1655: * clicks on buttons to page through the table.</p>
1656: * @see #getFirst()
1657: */
1658: public void setFirst(int first) {
1659: this .first = first;
1660: this .first_set = true;
1661: }
1662:
1663: // footerText
1664: private String footerText = null;
1665:
1666: /**
1667: * <p>The text to be displayed in the group footer.</p>
1668: */
1669: public String getFooterText() {
1670: if (this .footerText != null) {
1671: return this .footerText;
1672: }
1673: ValueBinding _vb = getValueBinding("footerText");
1674: if (_vb != null) {
1675: return (String) _vb.getValue(getFacesContext());
1676: }
1677: return null;
1678: }
1679:
1680: /**
1681: * <p>The text to be displayed in the group footer.</p>
1682: * @see #getFooterText()
1683: */
1684: public void setFooterText(String footerText) {
1685: this .footerText = footerText;
1686: }
1687:
1688: // groupToggleButton
1689: private boolean groupToggleButton = false;
1690: private boolean groupToggleButton_set = false;
1691:
1692: /**
1693: * <p>Use the <code>groupToggleButton</code> attribute to display a button in the
1694: * group header to allow users to collapse and expand the group of rows.</p>
1695: */
1696: public boolean isGroupToggleButton() {
1697: if (this .groupToggleButton_set) {
1698: return this .groupToggleButton;
1699: }
1700: ValueBinding _vb = getValueBinding("groupToggleButton");
1701: if (_vb != null) {
1702: Object _result = _vb.getValue(getFacesContext());
1703: if (_result == null) {
1704: return false;
1705: } else {
1706: return ((Boolean) _result).booleanValue();
1707: }
1708: }
1709: return false;
1710: }
1711:
1712: /**
1713: * <p>Use the <code>groupToggleButton</code> attribute to display a button in the
1714: * group header to allow users to collapse and expand the group of rows.</p>
1715: * @see #isGroupToggleButton()
1716: */
1717: public void setGroupToggleButton(boolean groupToggleButton) {
1718: this .groupToggleButton = groupToggleButton;
1719: this .groupToggleButton_set = true;
1720: }
1721:
1722: // headerText
1723: private String headerText = null;
1724:
1725: /**
1726: * <p>The text to be displayed in the group header.</p>
1727: */
1728: public String getHeaderText() {
1729: if (this .headerText != null) {
1730: return this .headerText;
1731: }
1732: ValueBinding _vb = getValueBinding("headerText");
1733: if (_vb != null) {
1734: return (String) _vb.getValue(getFacesContext());
1735: }
1736: return null;
1737: }
1738:
1739: /**
1740: * <p>The text to be displayed in the group header.</p>
1741: * @see #getHeaderText()
1742: */
1743: public void setHeaderText(String headerText) {
1744: this .headerText = headerText;
1745: }
1746:
1747: // multipleColumnFooters
1748: private boolean multipleColumnFooters = false;
1749: private boolean multipleColumnFooters_set = false;
1750:
1751: /**
1752: * <p>Use the <code>multipleColumnFooters</code> attribute when the
1753: * <code>ui:tableRowGroup</code> contains nested <code>ui:tableColumn</code> tags,
1754: * and you want the footers of all the <code>ui:tableColumn</code> tags to be
1755: * shown. The default is to show the footers of only the innermost level of nested
1756: * <code>ui:tableColumn</code> tags.</p>
1757: */
1758: public boolean isMultipleColumnFooters() {
1759: if (this .multipleColumnFooters_set) {
1760: return this .multipleColumnFooters;
1761: }
1762: ValueBinding _vb = getValueBinding("multipleColumnFooters");
1763: if (_vb != null) {
1764: Object _result = _vb.getValue(getFacesContext());
1765: if (_result == null) {
1766: return false;
1767: } else {
1768: return ((Boolean) _result).booleanValue();
1769: }
1770: }
1771: return false;
1772: }
1773:
1774: /**
1775: * <p>Use the <code>multipleColumnFooters</code> attribute when the
1776: * <code>ui:tableRowGroup</code> contains nested <code>ui:tableColumn</code> tags,
1777: * and you want the footers of all the <code>ui:tableColumn</code> tags to be
1778: * shown. The default is to show the footers of only the innermost level of nested
1779: * <code>ui:tableColumn</code> tags.</p>
1780: * @see #isMultipleColumnFooters()
1781: */
1782: public void setMultipleColumnFooters(boolean multipleColumnFooters) {
1783: this .multipleColumnFooters = multipleColumnFooters;
1784: this .multipleColumnFooters_set = true;
1785: }
1786:
1787: // multipleTableColumnFooters
1788: private boolean multipleTableColumnFooters = false;
1789: private boolean multipleTableColumnFooters_set = false;
1790:
1791: /**
1792: * <p>Use the <code>multipleTableColumnFooters</code> attribute when the
1793: * <code>ui:tableRowGroup</code> contains nested <code>ui:tableColumn</code> tags,
1794: * and you want the table footers of all the <code>ui:tableColumn</code> tags to
1795: * be shown. The default is to show the table footers of only the innermost level
1796: * of nested <code>ui:tableColumn</code> tags.</p>
1797: */
1798: public boolean isMultipleTableColumnFooters() {
1799: if (this .multipleTableColumnFooters_set) {
1800: return this .multipleTableColumnFooters;
1801: }
1802: ValueBinding _vb = getValueBinding("multipleTableColumnFooters");
1803: if (_vb != null) {
1804: Object _result = _vb.getValue(getFacesContext());
1805: if (_result == null) {
1806: return false;
1807: } else {
1808: return ((Boolean) _result).booleanValue();
1809: }
1810: }
1811: return false;
1812: }
1813:
1814: /**
1815: * <p>Use the <code>multipleTableColumnFooters</code> attribute when the
1816: * <code>ui:tableRowGroup</code> contains nested <code>ui:tableColumn</code> tags,
1817: * and you want the table footers of all the <code>ui:tableColumn</code> tags to
1818: * be shown. The default is to show the table footers of only the innermost level
1819: * of nested <code>ui:tableColumn</code> tags.</p>
1820: * @see #isMultipleTableColumnFooters()
1821: */
1822: public void setMultipleTableColumnFooters(
1823: boolean multipleTableColumnFooters) {
1824: this .multipleTableColumnFooters = multipleTableColumnFooters;
1825: this .multipleTableColumnFooters_set = true;
1826: }
1827:
1828: // onClick
1829: private String onClick = null;
1830:
1831: /**
1832: * <p>Scripting code executed when a mouse click
1833: * occurs over this component.</p>
1834: */
1835: public String getOnClick() {
1836: if (this .onClick != null) {
1837: return this .onClick;
1838: }
1839: ValueBinding _vb = getValueBinding("onClick");
1840: if (_vb != null) {
1841: return (String) _vb.getValue(getFacesContext());
1842: }
1843: return null;
1844: }
1845:
1846: /**
1847: * <p>Scripting code executed when a mouse click
1848: * occurs over this component.</p>
1849: * @see #getOnClick()
1850: */
1851: public void setOnClick(String onClick) {
1852: this .onClick = onClick;
1853: }
1854:
1855: // onDblClick
1856: private String onDblClick = null;
1857:
1858: /**
1859: * <p>Scripting code executed when a mouse double click
1860: * occurs over this component.</p>
1861: */
1862: public String getOnDblClick() {
1863: if (this .onDblClick != null) {
1864: return this .onDblClick;
1865: }
1866: ValueBinding _vb = getValueBinding("onDblClick");
1867: if (_vb != null) {
1868: return (String) _vb.getValue(getFacesContext());
1869: }
1870: return null;
1871: }
1872:
1873: /**
1874: * <p>Scripting code executed when a mouse double click
1875: * occurs over this component.</p>
1876: * @see #getOnDblClick()
1877: */
1878: public void setOnDblClick(String onDblClick) {
1879: this .onDblClick = onDblClick;
1880: }
1881:
1882: // onKeyDown
1883: private String onKeyDown = null;
1884:
1885: /**
1886: * <p>Scripting code executed when the user presses down on a key while the
1887: * component has focus.</p>
1888: */
1889: public String getOnKeyDown() {
1890: if (this .onKeyDown != null) {
1891: return this .onKeyDown;
1892: }
1893: ValueBinding _vb = getValueBinding("onKeyDown");
1894: if (_vb != null) {
1895: return (String) _vb.getValue(getFacesContext());
1896: }
1897: return null;
1898: }
1899:
1900: /**
1901: * <p>Scripting code executed when the user presses down on a key while the
1902: * component has focus.</p>
1903: * @see #getOnKeyDown()
1904: */
1905: public void setOnKeyDown(String onKeyDown) {
1906: this .onKeyDown = onKeyDown;
1907: }
1908:
1909: // onKeyPress
1910: private String onKeyPress = null;
1911:
1912: /**
1913: * <p>Scripting code executed when the user presses and releases a key while
1914: * the component has focus.</p>
1915: */
1916: public String getOnKeyPress() {
1917: if (this .onKeyPress != null) {
1918: return this .onKeyPress;
1919: }
1920: ValueBinding _vb = getValueBinding("onKeyPress");
1921: if (_vb != null) {
1922: return (String) _vb.getValue(getFacesContext());
1923: }
1924: return null;
1925: }
1926:
1927: /**
1928: * <p>Scripting code executed when the user presses and releases a key while
1929: * the component has focus.</p>
1930: * @see #getOnKeyPress()
1931: */
1932: public void setOnKeyPress(String onKeyPress) {
1933: this .onKeyPress = onKeyPress;
1934: }
1935:
1936: // onKeyUp
1937: private String onKeyUp = null;
1938:
1939: /**
1940: * <p>Scripting code executed when the user releases a key while the
1941: * component has focus.</p>
1942: */
1943: public String getOnKeyUp() {
1944: if (this .onKeyUp != null) {
1945: return this .onKeyUp;
1946: }
1947: ValueBinding _vb = getValueBinding("onKeyUp");
1948: if (_vb != null) {
1949: return (String) _vb.getValue(getFacesContext());
1950: }
1951: return null;
1952: }
1953:
1954: /**
1955: * <p>Scripting code executed when the user releases a key while the
1956: * component has focus.</p>
1957: * @see #getOnKeyUp()
1958: */
1959: public void setOnKeyUp(String onKeyUp) {
1960: this .onKeyUp = onKeyUp;
1961: }
1962:
1963: // onMouseDown
1964: private String onMouseDown = null;
1965:
1966: /**
1967: * <p>Scripting code executed when the user presses a mouse button while the
1968: * mouse pointer is on the component.</p>
1969: */
1970: public String getOnMouseDown() {
1971: if (this .onMouseDown != null) {
1972: return this .onMouseDown;
1973: }
1974: ValueBinding _vb = getValueBinding("onMouseDown");
1975: if (_vb != null) {
1976: return (String) _vb.getValue(getFacesContext());
1977: }
1978: return null;
1979: }
1980:
1981: /**
1982: * <p>Scripting code executed when the user presses a mouse button while the
1983: * mouse pointer is on the component.</p>
1984: * @see #getOnMouseDown()
1985: */
1986: public void setOnMouseDown(String onMouseDown) {
1987: this .onMouseDown = onMouseDown;
1988: }
1989:
1990: // onMouseMove
1991: private String onMouseMove = null;
1992:
1993: /**
1994: * <p>Scripting code executed when the user moves the mouse pointer while
1995: * over the component.</p>
1996: */
1997: public String getOnMouseMove() {
1998: if (this .onMouseMove != null) {
1999: return this .onMouseMove;
2000: }
2001: ValueBinding _vb = getValueBinding("onMouseMove");
2002: if (_vb != null) {
2003: return (String) _vb.getValue(getFacesContext());
2004: }
2005: return null;
2006: }
2007:
2008: /**
2009: * <p>Scripting code executed when the user moves the mouse pointer while
2010: * over the component.</p>
2011: * @see #getOnMouseMove()
2012: */
2013: public void setOnMouseMove(String onMouseMove) {
2014: this .onMouseMove = onMouseMove;
2015: }
2016:
2017: // onMouseOut
2018: private String onMouseOut = null;
2019:
2020: /**
2021: * <p>Scripting code executed when a mouse out movement
2022: * occurs over this component.</p>
2023: */
2024: public String getOnMouseOut() {
2025: if (this .onMouseOut != null) {
2026: return this .onMouseOut;
2027: }
2028: ValueBinding _vb = getValueBinding("onMouseOut");
2029: if (_vb != null) {
2030: return (String) _vb.getValue(getFacesContext());
2031: }
2032: return null;
2033: }
2034:
2035: /**
2036: * <p>Scripting code executed when a mouse out movement
2037: * occurs over this component.</p>
2038: * @see #getOnMouseOut()
2039: */
2040: public void setOnMouseOut(String onMouseOut) {
2041: this .onMouseOut = onMouseOut;
2042: }
2043:
2044: // onMouseOver
2045: private String onMouseOver = null;
2046:
2047: /**
2048: * <p>Scripting code executed when the user moves the mouse pointer into
2049: * the boundary of this component.</p>
2050: */
2051: public String getOnMouseOver() {
2052: if (this .onMouseOver != null) {
2053: return this .onMouseOver;
2054: }
2055: ValueBinding _vb = getValueBinding("onMouseOver");
2056: if (_vb != null) {
2057: return (String) _vb.getValue(getFacesContext());
2058: }
2059: return null;
2060: }
2061:
2062: /**
2063: * <p>Scripting code executed when the user moves the mouse pointer into
2064: * the boundary of this component.</p>
2065: * @see #getOnMouseOver()
2066: */
2067: public void setOnMouseOver(String onMouseOver) {
2068: this .onMouseOver = onMouseOver;
2069: }
2070:
2071: // onMouseUp
2072: private String onMouseUp = null;
2073:
2074: /**
2075: * <p>Scripting code executed when the user releases a mouse button while
2076: * the mouse pointer is on the component.</p>
2077: */
2078: public String getOnMouseUp() {
2079: if (this .onMouseUp != null) {
2080: return this .onMouseUp;
2081: }
2082: ValueBinding _vb = getValueBinding("onMouseUp");
2083: if (_vb != null) {
2084: return (String) _vb.getValue(getFacesContext());
2085: }
2086: return null;
2087: }
2088:
2089: /**
2090: * <p>Scripting code executed when the user releases a mouse button while
2091: * the mouse pointer is on the component.</p>
2092: * @see #getOnMouseUp()
2093: */
2094: public void setOnMouseUp(String onMouseUp) {
2095: this .onMouseUp = onMouseUp;
2096: }
2097:
2098: // rows
2099: private int rows = Integer.MIN_VALUE;
2100: private boolean rows_set = false;
2101:
2102: /**
2103: * <p>The number of rows per page</span> to be displayed for a paginated table. The
2104: * default value is 25 per page.</p>
2105: */
2106: public int getRows() {
2107: if (this .rows_set) {
2108: return this .rows;
2109: }
2110: ValueBinding _vb = getValueBinding("rows");
2111: if (_vb != null) {
2112: Object _result = _vb.getValue(getFacesContext());
2113: if (_result == null) {
2114: return Integer.MIN_VALUE;
2115: } else {
2116: return ((Integer) _result).intValue();
2117: }
2118: }
2119: return 25;
2120: }
2121:
2122: /**
2123: * <p>The number of rows per page</span> to be displayed for a paginated table. The
2124: * default value is 25 per page.</p>
2125: * @see #getRows()
2126: */
2127: public void setRows(int rows) {
2128: this .rows = rows;
2129: this .rows_set = true;
2130: }
2131:
2132: // selectMultipleToggleButton
2133: private boolean selectMultipleToggleButton = false;
2134: private boolean selectMultipleToggleButton_set = false;
2135:
2136: /**
2137: * <p>Use the <code>selectMultipleToggleButton</code> attribute to display a button
2138: * in the group header to allow users to select all rows of the group at once.
2139: * The button toggles a column of checkboxes using the id that is given to the
2140: * <code>selectId</code> attribute of the <code>ui:tableColumn</code> tag.</p>
2141: */
2142: public boolean isSelectMultipleToggleButton() {
2143: if (this .selectMultipleToggleButton_set) {
2144: return this .selectMultipleToggleButton;
2145: }
2146: ValueBinding _vb = getValueBinding("selectMultipleToggleButton");
2147: if (_vb != null) {
2148: Object _result = _vb.getValue(getFacesContext());
2149: if (_result == null) {
2150: return false;
2151: } else {
2152: return ((Boolean) _result).booleanValue();
2153: }
2154: }
2155: return false;
2156: }
2157:
2158: /**
2159: * <p>Use the <code>selectMultipleToggleButton</code> attribute to display a button
2160: * in the group header to allow users to select all rows of the group at once.
2161: * The button toggles a column of checkboxes using the id that is given to the
2162: * <code>selectId</code> attribute of the <code>ui:tableColumn</code> tag.</p>
2163: * @see #isSelectMultipleToggleButton()
2164: */
2165: public void setSelectMultipleToggleButton(
2166: boolean selectMultipleToggleButton) {
2167: this .selectMultipleToggleButton = selectMultipleToggleButton;
2168: this .selectMultipleToggleButton_set = true;
2169: }
2170:
2171: // selected
2172: private boolean selected = false;
2173: private boolean selected_set = false;
2174:
2175: /**
2176: * <p>Flag indicating that the current row is selected. If the value is set to true,
2177: * the row will appear highlighted.</p>
2178: */
2179: public boolean isSelected() {
2180: if (this .selected_set) {
2181: return this .selected;
2182: }
2183: ValueBinding _vb = getValueBinding("selected");
2184: if (_vb != null) {
2185: Object _result = _vb.getValue(getFacesContext());
2186: if (_result == null) {
2187: return false;
2188: } else {
2189: return ((Boolean) _result).booleanValue();
2190: }
2191: }
2192: return false;
2193: }
2194:
2195: /**
2196: * <p>Flag indicating that the current row is selected. If the value is set to true,
2197: * the row will appear highlighted.</p>
2198: * @see #isSelected()
2199: */
2200: public void setSelected(boolean selected) {
2201: this .selected = selected;
2202: this .selected_set = true;
2203: }
2204:
2205: // sourceData
2206: private Object sourceData = null;
2207:
2208: /**
2209: * <p>The <code>sourceData</code> attribute is used to specify the data source to
2210: * populate the table. The value of the <code>sourceData</code> attribute must be
2211: * a JavaServer Faces EL expression that resolves to a backing bean of type
2212: * <code>com.sun.data.provider.TableDataProvider</code>.
2213: * <br><br>
2214: * The sourceData property is referenced during multiple phases of the JavaServer
2215: * Faces life cycle while iterating over the rows. The TableDataProvider object
2216: * that is bound to this attribute should be cached so that the object is not
2217: * created more often than needed.</p>
2218: */
2219: public Object getSourceData() {
2220: if (this .sourceData != null) {
2221: return this .sourceData;
2222: }
2223: ValueBinding _vb = getValueBinding("sourceData");
2224: if (_vb != null) {
2225: return (Object) _vb.getValue(getFacesContext());
2226: }
2227: return null;
2228: }
2229:
2230: /**
2231: * <p>The <code>sourceData</code> attribute is used to specify the data source to
2232: * populate the table. The value of the <code>sourceData</code> attribute must be
2233: * a JavaServer Faces EL expression that resolves to a backing bean of type
2234: * <code>com.sun.data.provider.TableDataProvider</code>.
2235: * <br><br>
2236: * The sourceData property is referenced during multiple phases of the JavaServer
2237: * Faces life cycle while iterating over the rows. The TableDataProvider object
2238: * that is bound to this attribute should be cached so that the object is not
2239: * created more often than needed.</p>
2240: * @see #getSourceData()
2241: */
2242: public void setSourceData(Object sourceData) {
2243: this .sourceData = sourceData;
2244: }
2245:
2246: // sourceVar
2247: private String sourceVar = null;
2248:
2249: /**
2250: * <p>Use the <code>sourceVar</code> attribute to specify the name of the
2251: * request-scope attribute under which model data for the current row will be
2252: * exposed when iterating. During iterative processing over the rows of data in
2253: * the data provider, the TableDataProvider for the current row is exposed as a
2254: * request attribute under the key specified by this property. Note: This
2255: * value must be unique for each table in the JSP page.</p>
2256: */
2257: public String getSourceVar() {
2258: if (this .sourceVar != null) {
2259: return this .sourceVar;
2260: }
2261: ValueBinding _vb = getValueBinding("sourceVar");
2262: if (_vb != null) {
2263: return (String) _vb.getValue(getFacesContext());
2264: }
2265: return null;
2266: }
2267:
2268: /**
2269: * <p>Use the <code>sourceVar</code> attribute to specify the name of the
2270: * request-scope attribute under which model data for the current row will be
2271: * exposed when iterating. During iterative processing over the rows of data in
2272: * the data provider, the TableDataProvider for the current row is exposed as a
2273: * request attribute under the key specified by this property. Note: This
2274: * value must be unique for each table in the JSP page.</p>
2275: * @see #getSourceVar()
2276: */
2277: public void setSourceVar(String sourceVar) {
2278: this .sourceVar = sourceVar;
2279: }
2280:
2281: // styleClasses
2282: private String styleClasses = null;
2283:
2284: /**
2285: * <p>Use the <code>styleClasses</code> attribute to specify a list of CSS style
2286: * classes to apply to the rows of the group. You can apply all the styles in the
2287: * list to each row by separating the class names with commas. Each row looks the
2288: * same when commas are used to delimit the styles. You can apply alternating
2289: * styles to individual rows by separating the style class names with spaces. You
2290: * can create a pattern of shading alternate rows, for example, to improve
2291: * readability of the table. For example, if the list has two elements, the first
2292: * style class in the list is applied to the first row, the second class to the
2293: * second row, the first class to the third row, the second class to the fourth
2294: * row, etc. The tableRowGroup component iterates through the list of styles and
2295: * repeats from the beginning until a style is applied to each row.</p>
2296: */
2297: public String getStyleClasses() {
2298: if (this .styleClasses != null) {
2299: return this .styleClasses;
2300: }
2301: ValueBinding _vb = getValueBinding("styleClasses");
2302: if (_vb != null) {
2303: return (String) _vb.getValue(getFacesContext());
2304: }
2305: return null;
2306: }
2307:
2308: /**
2309: * <p>Use the <code>styleClasses</code> attribute to specify a list of CSS style
2310: * classes to apply to the rows of the group. You can apply all the styles in the
2311: * list to each row by separating the class names with commas. Each row looks the
2312: * same when commas are used to delimit the styles. You can apply alternating
2313: * styles to individual rows by separating the style class names with spaces. You
2314: * can create a pattern of shading alternate rows, for example, to improve
2315: * readability of the table. For example, if the list has two elements, the first
2316: * style class in the list is applied to the first row, the second class to the
2317: * second row, the first class to the third row, the second class to the fourth
2318: * row, etc. The tableRowGroup component iterates through the list of styles and
2319: * repeats from the beginning until a style is applied to each row.</p>
2320: * @see #getStyleClasses()
2321: */
2322: public void setStyleClasses(String styleClasses) {
2323: this .styleClasses = styleClasses;
2324: }
2325:
2326: // tableDataFilter
2327: private com.sun.data.provider.TableDataFilter tableDataFilter = null;
2328:
2329: /**
2330: * <p>The <code>tableDataFilter</code> attribute is used to define filter critera and
2331: * mechanism for filtering the contents of a TableDataProvider. The value of the
2332: * <code>tableDataFilter</code> attribute must be a JavaServer Faces EL expression
2333: * that resolves to a backing bean of type
2334: * <code>com.sun.data.provider.TableDataFilter</code>.</p>
2335: */
2336: public com.sun.data.provider.TableDataFilter getTableDataFilter() {
2337: if (this .tableDataFilter != null) {
2338: return this .tableDataFilter;
2339: }
2340: ValueBinding _vb = getValueBinding("tableDataFilter");
2341: if (_vb != null) {
2342: return (com.sun.data.provider.TableDataFilter) _vb
2343: .getValue(getFacesContext());
2344: }
2345: return null;
2346: }
2347:
2348: /**
2349: * <p>The <code>tableDataFilter</code> attribute is used to define filter critera and
2350: * mechanism for filtering the contents of a TableDataProvider. The value of the
2351: * <code>tableDataFilter</code> attribute must be a JavaServer Faces EL expression
2352: * that resolves to a backing bean of type
2353: * <code>com.sun.data.provider.TableDataFilter</code>.</p>
2354: * @see #getTableDataFilter()
2355: */
2356: public void setTableDataFilter(
2357: com.sun.data.provider.TableDataFilter tableDataFilter) {
2358: this .tableDataFilter = tableDataFilter;
2359: }
2360:
2361: // tableDataSorter
2362: private com.sun.data.provider.TableDataSorter tableDataSorter = null;
2363:
2364: /**
2365: * <p>The <code>tableDataSorter</code> attribute is used to define sort critera and
2366: * the mechanism for sorting the contents of a TableDataProvider. The value of the
2367: * <code>tableDataSorter</code> attribute must be a JavaServer Faces EL expression
2368: * that resolves to a backing bean of type
2369: * <code>com.sun.data.provider.TableDataSorter</code>.</p>
2370: */
2371: public com.sun.data.provider.TableDataSorter getTableDataSorter() {
2372: if (this .tableDataSorter != null) {
2373: return this .tableDataSorter;
2374: }
2375: ValueBinding _vb = getValueBinding("tableDataSorter");
2376: if (_vb != null) {
2377: return (com.sun.data.provider.TableDataSorter) _vb
2378: .getValue(getFacesContext());
2379: }
2380: return null;
2381: }
2382:
2383: /**
2384: * <p>The <code>tableDataSorter</code> attribute is used to define sort critera and
2385: * the mechanism for sorting the contents of a TableDataProvider. The value of the
2386: * <code>tableDataSorter</code> attribute must be a JavaServer Faces EL expression
2387: * that resolves to a backing bean of type
2388: * <code>com.sun.data.provider.TableDataSorter</code>.</p>
2389: * @see #getTableDataSorter()
2390: */
2391: public void setTableDataSorter(
2392: com.sun.data.provider.TableDataSorter tableDataSorter) {
2393: this .tableDataSorter = tableDataSorter;
2394: }
2395:
2396: // toolTip
2397: private String toolTip = null;
2398:
2399: /**
2400: * <p>Display the text as a tooltip for this component</p>
2401: */
2402: public String getToolTip() {
2403: if (this .toolTip != null) {
2404: return this .toolTip;
2405: }
2406: ValueBinding _vb = getValueBinding("toolTip");
2407: if (_vb != null) {
2408: return (String) _vb.getValue(getFacesContext());
2409: }
2410: return null;
2411: }
2412:
2413: /**
2414: * <p>Display the text as a tooltip for this component</p>
2415: * @see #getToolTip()
2416: */
2417: public void setToolTip(String toolTip) {
2418: this .toolTip = toolTip;
2419: }
2420:
2421: // valign
2422: private String valign = null;
2423:
2424: /**
2425: * <p>Vertical alignment (top, middle, bottom) for the content of each cell in the column</p>
2426: */
2427: public String getValign() {
2428: if (this .valign != null) {
2429: return this .valign;
2430: }
2431: ValueBinding _vb = getValueBinding("valign");
2432: if (_vb != null) {
2433: return (String) _vb.getValue(getFacesContext());
2434: }
2435: return null;
2436: }
2437:
2438: /**
2439: * <p>Vertical alignment (top, middle, bottom) for the content of each cell in the column</p>
2440: * @see #getValign()
2441: */
2442: public void setValign(String valign) {
2443: this .valign = valign;
2444: }
2445:
2446: // visible
2447: private boolean visible = false;
2448: private boolean visible_set = false;
2449:
2450: /**
2451: * <p>Use the visible attribute to indicate whether the component should be
2452: * viewable by the user in the rendered HTML page. If set to false, the
2453: * HTML code for the component is present in the page, but the component
2454: * is hidden with style attributes. By default, visible is set to true, so
2455: * HTML for the component HTML is included and visible to the user. If the
2456: * component is not visible, it can still be processed on subsequent form
2457: * submissions because the HTML is present.</p>
2458: */
2459: public boolean isVisible() {
2460: if (this .visible_set) {
2461: return this .visible;
2462: }
2463: ValueBinding _vb = getValueBinding("visible");
2464: if (_vb != null) {
2465: Object _result = _vb.getValue(getFacesContext());
2466: if (_result == null) {
2467: return false;
2468: } else {
2469: return ((Boolean) _result).booleanValue();
2470: }
2471: }
2472: return true;
2473: }
2474:
2475: /**
2476: * <p>Use the visible attribute to indicate whether the component should be
2477: * viewable by the user in the rendered HTML page. If set to false, the
2478: * HTML code for the component is present in the page, but the component
2479: * is hidden with style attributes. By default, visible is set to true, so
2480: * HTML for the component HTML is included and visible to the user. If the
2481: * component is not visible, it can still be processed on subsequent form
2482: * submissions because the HTML is present.</p>
2483: * @see #isVisible()
2484: */
2485: public void setVisible(boolean visible) {
2486: this .visible = visible;
2487: this .visible_set = true;
2488: }
2489:
2490: /**
2491: * <p>Restore the state of this component.</p>
2492: */
2493: public void restoreState(FacesContext _context, Object _state) {
2494: Object _values[] = (Object[]) _state;
2495: super .restoreState(_context, _values[0]);
2496: this .aboveColumnFooter = ((Boolean) _values[1]).booleanValue();
2497: this .aboveColumnFooter_set = ((Boolean) _values[2])
2498: .booleanValue();
2499: this .aboveColumnHeader = ((Boolean) _values[3]).booleanValue();
2500: this .aboveColumnHeader_set = ((Boolean) _values[4])
2501: .booleanValue();
2502: this .align = (String) _values[5];
2503: this .bgColor = (String) _values[6];
2504: this ._char = (String) _values[7];
2505: this .charOff = (String) _values[8];
2506: this .collapsed = ((Boolean) _values[9]).booleanValue();
2507: this .collapsed_set = ((Boolean) _values[10]).booleanValue();
2508: this .emptyDataMsg = (String) _values[11];
2509: this .extraFooterHtml = (String) _values[12];
2510: this .extraHeaderHtml = (String) _values[13];
2511: this .first = ((Integer) _values[14]).intValue();
2512: this .first_set = ((Boolean) _values[15]).booleanValue();
2513: this .footerText = (String) _values[16];
2514: this .groupToggleButton = ((Boolean) _values[17]).booleanValue();
2515: this .groupToggleButton_set = ((Boolean) _values[18])
2516: .booleanValue();
2517: this .headerText = (String) _values[19];
2518: this .multipleColumnFooters = ((Boolean) _values[20])
2519: .booleanValue();
2520: this .multipleColumnFooters_set = ((Boolean) _values[21])
2521: .booleanValue();
2522: this .multipleTableColumnFooters = ((Boolean) _values[22])
2523: .booleanValue();
2524: this .multipleTableColumnFooters_set = ((Boolean) _values[23])
2525: .booleanValue();
2526: this .onClick = (String) _values[24];
2527: this .onDblClick = (String) _values[25];
2528: this .onKeyDown = (String) _values[26];
2529: this .onKeyPress = (String) _values[27];
2530: this .onKeyUp = (String) _values[28];
2531: this .onMouseDown = (String) _values[29];
2532: this .onMouseMove = (String) _values[30];
2533: this .onMouseOut = (String) _values[31];
2534: this .onMouseOver = (String) _values[32];
2535: this .onMouseUp = (String) _values[33];
2536: this .rows = ((Integer) _values[34]).intValue();
2537: this .rows_set = ((Boolean) _values[35]).booleanValue();
2538: this .selectMultipleToggleButton = ((Boolean) _values[36])
2539: .booleanValue();
2540: this .selectMultipleToggleButton_set = ((Boolean) _values[37])
2541: .booleanValue();
2542: this .selected = ((Boolean) _values[38]).booleanValue();
2543: this .selected_set = ((Boolean) _values[39]).booleanValue();
2544: this .sourceData = (Object) _values[40];
2545: this .sourceVar = (String) _values[41];
2546: this .styleClasses = (String) _values[42];
2547: this .tableDataFilter = (com.sun.data.provider.TableDataFilter) _values[43];
2548: this .tableDataSorter = (com.sun.data.provider.TableDataSorter) _values[44];
2549: this .toolTip = (String) _values[45];
2550: this .valign = (String) _values[46];
2551: this .visible = ((Boolean) _values[47]).booleanValue();
2552: this .visible_set = ((Boolean) _values[48]).booleanValue();
2553: }
2554:
2555: /**
2556: * <p>Save the state of this component.</p>
2557: */
2558: public Object saveState(FacesContext _context) {
2559: Object _values[] = new Object[49];
2560: _values[0] = super .saveState(_context);
2561: _values[1] = this .aboveColumnFooter ? Boolean.TRUE
2562: : Boolean.FALSE;
2563: _values[2] = this .aboveColumnFooter_set ? Boolean.TRUE
2564: : Boolean.FALSE;
2565: _values[3] = this .aboveColumnHeader ? Boolean.TRUE
2566: : Boolean.FALSE;
2567: _values[4] = this .aboveColumnHeader_set ? Boolean.TRUE
2568: : Boolean.FALSE;
2569: _values[5] = this .align;
2570: _values[6] = this .bgColor;
2571: _values[7] = this ._char;
2572: _values[8] = this .charOff;
2573: _values[9] = this .collapsed ? Boolean.TRUE : Boolean.FALSE;
2574: _values[10] = this .collapsed_set ? Boolean.TRUE : Boolean.FALSE;
2575: _values[11] = this .emptyDataMsg;
2576: _values[12] = this .extraFooterHtml;
2577: _values[13] = this .extraHeaderHtml;
2578: _values[14] = new Integer(this .first);
2579: _values[15] = this .first_set ? Boolean.TRUE : Boolean.FALSE;
2580: _values[16] = this .footerText;
2581: _values[17] = this .groupToggleButton ? Boolean.TRUE
2582: : Boolean.FALSE;
2583: _values[18] = this .groupToggleButton_set ? Boolean.TRUE
2584: : Boolean.FALSE;
2585: _values[19] = this .headerText;
2586: _values[20] = this .multipleColumnFooters ? Boolean.TRUE
2587: : Boolean.FALSE;
2588: _values[21] = this .multipleColumnFooters_set ? Boolean.TRUE
2589: : Boolean.FALSE;
2590: _values[22] = this .multipleTableColumnFooters ? Boolean.TRUE
2591: : Boolean.FALSE;
2592: _values[23] = this .multipleTableColumnFooters_set ? Boolean.TRUE
2593: : Boolean.FALSE;
2594: _values[24] = this .onClick;
2595: _values[25] = this .onDblClick;
2596: _values[26] = this .onKeyDown;
2597: _values[27] = this .onKeyPress;
2598: _values[28] = this .onKeyUp;
2599: _values[29] = this .onMouseDown;
2600: _values[30] = this .onMouseMove;
2601: _values[31] = this .onMouseOut;
2602: _values[32] = this .onMouseOver;
2603: _values[33] = this .onMouseUp;
2604: _values[34] = new Integer(this .rows);
2605: _values[35] = this .rows_set ? Boolean.TRUE : Boolean.FALSE;
2606: _values[36] = this .selectMultipleToggleButton ? Boolean.TRUE
2607: : Boolean.FALSE;
2608: _values[37] = this .selectMultipleToggleButton_set ? Boolean.TRUE
2609: : Boolean.FALSE;
2610: _values[38] = this .selected ? Boolean.TRUE : Boolean.FALSE;
2611: _values[39] = this .selected_set ? Boolean.TRUE : Boolean.FALSE;
2612: _values[40] = this .sourceData;
2613: _values[41] = this .sourceVar;
2614: _values[42] = this .styleClasses;
2615: _values[43] = this .tableDataFilter;
2616: _values[44] = this .tableDataSorter;
2617: _values[45] = this .toolTip;
2618: _values[46] = this .valign;
2619: _values[47] = this .visible ? Boolean.TRUE : Boolean.FALSE;
2620: _values[48] = this.visible_set ? Boolean.TRUE : Boolean.FALSE;
2621: return _values;
2622: }
2623:
2624: }
|