You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Jason Suplizio <su...@gmail.com> on 2006/02/24 21:26:50 UTC

TableView update problems

Hello,
We've got a TableView (wrapped in a Form component) that consists of a
variety of form elements. We're noticing a problem when the values of these
elements (like textfields) is changed. Here's a use case: I have 10 rows,
each is updated and when the changes are submitted, the iterator only sets
the new values on the first row...so row 1 is updated with the values of row
1, then row 1 is updated with row 2,...repeat until the last row is reached
- where row 1 will then contain row 10's values - and the rest of the rows
values remain unchanged (with values before any changes were submitted).

Please help, this thing's on its way to QA....


<table width="100%" border="0" jwcid="layoutNavTable" name="layoutNavTable"
id="layoutNavTable" class="centerInnerTbl">
                    <span jwcid="layoutNavTableColumns"/>

                    <span jwcid="layoutNavTableRows">

                        <!-- Blocks for custom rows values -->
                        <span jwcid="layoutNavTableValues">

                                <span jwcid="actionsColumnValue">
                                    <input jwcid="deleteNavColumn"
image="ognl:components.reportMapAssets.assets.deleteAction" alt="Delete
Admin Report Map" onclick="javascript: getConfirmation();"
class="imgInput"/>
                                </span>
                                <span jwcid="sortColumnValue">
                                    <span jwcid="sortField"></span>
                                </span>
                                <span jwcid="colTitleColumnValue">
                                    <span jwcid="colTitleField"></span>
                                </span>
                                <span jwcid="dataFieldColumnValue">
                                    <span jwcid="dataField"></span>
                                </span>
                                <span jwcid="alignColumnValue">
                                    <input jwcid="alignSelect"/>
                                </span>
                                <span jwcid="typeColumnValue">
                                    <input jwcid="typeSelect"/>
                                </span>
                                <span jwcid="widthColumnValue">
                                    <span jwcid="width"></span>
                                </span>
                                <span jwcid="colSpanColumnValue">
                                    <span jwcid="colSpan"></span>
                                </span>
                                <span jwcid="navContextColumnValue">
                                    <span jwcid="navContextSelect"/>
                                </span>
                                <span jwcid="visibleColumnValue">
                                    <input jwcid="visibleSelect"/>
                                </span>
                                <span jwcid="requiredColumnValue">
                                    <input jwcid="requiredSelect"/>
                                </span>
                            </span>
                        <!-- //end rows block -->

                    </span>
                    <tr>
                        <td colspan="11" align="right"><input
jwcid="addNavColumn" class="submitBtn"/></td>
                    </tr>
            </table>

/** From the .page file **/
    <property name="row"/> <!-- holder for current collection row -->
    <property name="currentEntry"/>
    <property name="currentMap"/>

    <component id="layoutNavTable" type="contrib:TableView">
         <binding name="source" value="layoutNavColumns"/>
        <binding name="columns" value="literal:!actions: :actions,
!sort:Order:sort, !colTitle:Col Title:colTitle, !dataField:Data
Field:dataField, !align:Align:align, !type:Type:type, !width:Width %:width,
!colSpan:Colspan:colSpan, !navContext:Nav Context:navContext,
!visible:Visible:visble, !required:Required:required"/>
     </component>

    <component id="layoutNavTableColumns" type="contrib:TableColumns">
        <binding name="arrowUpAsset" value="
components.reportMapAssets.assets.upArrow"/>
        <binding name="arrowDownAsset" value="
components.reportMapAssets.assets.downArrow"/>
    </component>

    <component id="layoutNavTablePages" type="contrib:TablePages"/>

    <component id="layoutNavTableRows" type="contrib:TableRows">
             <binding name="row" value="row"/> <!-- The value object of the
current row being rendered -->
    </component>

    <component id="layoutNavTableValues" type="contrib:TableValues"/>

     <component id="actionsColumnValue" type="Block"/>

     <component id="deleteNavColumn" type="ImageSubmit">
         <binding name="listener" value="listener:doDeleteNavColumn"/>
         <binding name="parameters" value="row"/>
     </component>

     <!-- Customized sort column -->
    <component id="sortColumnValue" type="Block"/>

    <component id="sortField" type="TextField">
        <binding name="value" value="ognl:row.sort"/>
        <binding name="size" value="1"/>
        <binding name="translator" value="translator:number"/>
        <binding name="validators" value="validators:min=0"/>
        <binding name="displayName" value="literal:Sort"/>
    </component>

    <!-- Customized columnTitle column -->
    <component id="colTitleColumnValue" type="Block"/>

    <component id="colTitleField" type="TextField">
        <binding name="value" value="ognl:row.colTitle"/>
        <binding name="size" value="15"/>
    </component>

    <!-- Customized Data Field column -->
    <component id="dataFieldColumnValue" type="Block"/>

    <component id="dataField" type="TextField">
        <binding name="value" value="ognl:row.dataField"/>
        <binding name="size" value="15"/>
    </component>

    <!-- Customized Align column -->
    <component id="alignColumnValue" type="Block"/>

    <component id="alignSelect" type="PropertySelection">
        <binding name="model" value="row.availAlign"/>
        <binding name="value" value="row.align"/>
    </component>

    <!-- Customized Type column -->
    <component id="typeColumnValue" type="Block"/>

    <component id="typeSelect" type="PropertySelection">
        <binding name="model" value="row.availType"/>
        <binding name="value" value="row.type"/>
    </component>

    <!-- Customized Width column -->
    <component id="widthColumnValue" type="Block"/>

    <component id="width" type="TextField">
        <binding name="value" value="ognl:row.width"/>
        <binding name="size" value="1"/>
    </component>

    <!-- Customized Colspan column -->
    <component id="colSpanColumnValue" type="Block"/>

    <component id="colSpan" type="TextField">
        <binding name="value" value="ognl:row.colSpan"/>
        <binding name="size" value="1"/>
    </component>

        <!-- Customized Nav Context column -->
    <component id="navContextColumnValue" type="Block"/>

    <component id="navContextSelect" type="PropertySelection">
        <binding name="model" value="row.availNavContext"/>
        <binding name="value" value="row.navContext"/>
    </component>

    <component id="addNavColumn" type="Submit">
        <binding name="listener" value="listener:doAddNavColumn"/>
        <binding name="value" value="literal:Add Column"/>
    </component>

    <!-- Customized Visible column -->
    <component id="visibleColumnValue" type="Block"/>

    <component id="visibleSelect" type="PropertySelection">
        <binding name="model" value="row.availVisible"/>
        <binding name="value" value="row.visible"/>
    </component>

    <!-- Customized Required column -->
    <component id="requiredColumnValue" type="Block"/>

    <component id="requiredSelect" type="PropertySelection">
        <binding name="model" value="row.availRequired"/>
        <binding name="value" value="row.required"/>
    </component>


    <!-- Customized Parameter column -->

    <component id="parameterTable" type="contrib:TableView">
         <binding name="source" value="paramColumns"/>
        <binding name="columns" value="literal:!deleteActions:
:deleteActions, !parameter:Parameter:parameter, !value:Value:value"/>
     </component>

    <component id="parameterTableColumns"
type="contrib:TableColumns"></component>

    <component id="parameterTablePages" type="contrib:TablePages"/>

    <component id="parameterTableRows" type="contrib:TableRows">
             <binding name="row" value="currentEntry"/> <!-- The value
object of the current row being rendered -->
    </component>

    <component id="parameterTableValues" type="contrib:TableValues"/>

    <component id="deleteActionsColumnValue" type="Block"/>

     <component id="paramDeleteColumn" type="ImageSubmit">
         <binding name="listener" value="listener:doDeleteParamColumn"/>
         <binding name="parameters" value="currentEntry"/>
         <binding name="image" value="ognl:
components.reportMapAssets.assets.deleteAction"/>
         <binding name="alt" value="literal:Delete Report Map"/>
     </component>

Re: TableView update problems

Posted by Jason Suplizio <su...@gmail.com>.
Any idea on what could be causing this?

On 2/24/06, Jason Suplizio <su...@gmail.com> wrote:
>
> Hello,
> We've got a TableView (wrapped in a Form component) that consists of a
> variety of form elements. We're noticing a problem when the values of these
> elements (like textfields) is changed. Here's a use case: I have 10 rows,
> each is updated and when the changes are submitted, the iterator only sets
> the new values on the first row...so row 1 is updated with the values of row
> 1, then row 1 is updated with row 2,...repeat until the last row is reached
> - where row 1 will then contain row 10's values - and the rest of the rows
> values remain unchanged (with values before any changes were submitted).
>
> Please help, this thing's on its way to QA....
>
>
> <table width="100%" border="0" jwcid="layoutNavTable"
> name="layoutNavTable" id="layoutNavTable" class="centerInnerTbl">
>                     <span jwcid="layoutNavTableColumns"/>
>
>                     <span jwcid="layoutNavTableRows">
>
>                         <!-- Blocks for custom rows values -->
>                         <span jwcid="layoutNavTableValues">
>
>                                 <span jwcid="actionsColumnValue">
>                                     <input jwcid="deleteNavColumn"
> image="ognl: components.reportMapAssets.assets.deleteAction" alt="Delete
> Admin Report Map" onclick="javascript: getConfirmation();"
> class="imgInput"/>
>                                 </span>
>                                 <span jwcid="sortColumnValue">
>                                     <span jwcid="sortField"></span>
>                                 </span>
>                                 <span jwcid="colTitleColumnValue">
>                                     <span jwcid="colTitleField"></span>
>                                 </span>
>                                 <span jwcid="dataFieldColumnValue">
>                                     <span jwcid="dataField"></span>
>                                 </span>
>                                 <span jwcid="alignColumnValue">
>                                     <input jwcid="alignSelect"/>
>                                 </span>
>                                 <span jwcid="typeColumnValue">
>                                     <input jwcid="typeSelect"/>
>                                 </span>
>                                 <span jwcid="widthColumnValue">
>                                     <span jwcid="width"></span>
>                                 </span>
>                                 <span jwcid="colSpanColumnValue">
>                                     <span jwcid="colSpan"></span>
>                                 </span>
>                                 <span jwcid="navContextColumnValue">
>                                     <span jwcid="navContextSelect"/>
>                                 </span>
>                                 <span jwcid="visibleColumnValue">
>                                     <input jwcid="visibleSelect"/>
>                                 </span>
>                                 <span jwcid="requiredColumnValue">
>                                     <input jwcid="requiredSelect"/>
>                                 </span>
>                             </span>
>                         <!-- //end rows block -->
>
>                     </span>
>                     <tr>
>                         <td colspan="11" align="right"><input
> jwcid="addNavColumn" class="submitBtn"/></td>
>                     </tr>
>             </table>
>
> /** From the .page file **/
>     <property name="row"/> <!-- holder for current collection row -->
>     <property name="currentEntry"/>
>     <property name="currentMap"/>
>
>     <component id="layoutNavTable" type="contrib:TableView">
>          <binding name="source" value="layoutNavColumns"/>
>         <binding name="columns" value="literal:!actions: :actions,
> !sort:Order:sort, !colTitle:Col Title:colTitle, !dataField:Data
> Field:dataField, !align:Align:align, !type:Type:type, !width:Width %:width,
> !colSpan:Colspan:colSpan, !navContext:Nav Context:navContext,
> !visible:Visible:visble, !required:Required:required"/>
>      </component>
>
>     <component id="layoutNavTableColumns" type="contrib:TableColumns">
>         <binding name="arrowUpAsset" value="
> components.reportMapAssets.assets.upArrow "/>
>         <binding name="arrowDownAsset" value="
> components.reportMapAssets.assets.downArrow"/>
>     </component>
>
>     <component id="layoutNavTablePages" type="contrib:TablePages"/>
>
>     <component id="layoutNavTableRows" type="contrib:TableRows">
>              <binding name="row" value="row"/> <!-- The value object of
> the current row being rendered -->
>     </component>
>
>     <component id="layoutNavTableValues" type="contrib:TableValues"/>
>
>      <component id="actionsColumnValue" type="Block"/>
>
>      <component id="deleteNavColumn" type="ImageSubmit">
>          <binding name="listener" value="listener:doDeleteNavColumn"/>
>          <binding name="parameters" value="row"/>
>      </component>
>
>      <!-- Customized sort column -->
>     <component id="sortColumnValue" type="Block"/>
>
>     <component id="sortField" type="TextField">
>         <binding name="value" value="ognl:row.sort"/>
>         <binding name="size" value="1"/>
>         <binding name="translator" value="translator:number"/>
>         <binding name="validators" value="validators:min=0"/>
>         <binding name="displayName" value="literal:Sort"/>
>     </component>
>
>     <!-- Customized columnTitle column -->
>     <component id="colTitleColumnValue" type="Block"/>
>
>     <component id="colTitleField" type="TextField">
>         <binding name="value" value="ognl: row.colTitle"/>
>         <binding name="size" value="15"/>
>     </component>
>
>     <!-- Customized Data Field column -->
>     <component id="dataFieldColumnValue" type="Block"/>
>
>     <component id="dataField" type="TextField">
>         <binding name="value" value="ognl:row.dataField"/>
>         <binding name="size" value="15"/>
>     </component>
>
>     <!-- Customized Align column -->
>     <component id="alignColumnValue" type="Block"/>
>
>     <component id="alignSelect" type="PropertySelection">
>         <binding name="model" value="row.availAlign"/>
>         <binding name="value" value="row.align"/>
>     </component>
>
>     <!-- Customized Type column -->
>     <component id="typeColumnValue" type="Block"/>
>
>     <component id="typeSelect" type="PropertySelection">
>         <binding name="model" value=" row.availType"/>
>         <binding name="value" value="row.type"/>
>     </component>
>
>     <!-- Customized Width column -->
>     <component id="widthColumnValue" type="Block"/>
>
>     <component id="width" type="TextField">
>         <binding name="value" value="ognl:row.width"/>
>         <binding name="size" value="1"/>
>     </component>
>
>     <!-- Customized Colspan column -->
>     <component id="colSpanColumnValue" type="Block"/>
>
>     <component id="colSpan" type="TextField">
>         <binding name="value" value="ognl:row.colSpan"/>
>         <binding name="size" value="1"/>
>     </component>
>
>         <!-- Customized Nav Context column -->
>     <component id="navContextColumnValue" type="Block"/>
>
>     <component id="navContextSelect" type="PropertySelection">
>         <binding name="model" value=" row.availNavContext"/>
>         <binding name="value" value="row.navContext"/>
>     </component>
>
>     <component id="addNavColumn" type="Submit">
>         <binding name="listener" value="listener:doAddNavColumn"/>
>         <binding name="value" value="literal:Add Column"/>
>     </component>
>
>     <!-- Customized Visible column -->
>     <component id="visibleColumnValue" type="Block"/>
>
>     <component id="visibleSelect" type="PropertySelection">
>         <binding name="model" value="row.availVisible"/>
>         <binding name="value" value="row.visible"/>
>     </component>
>
>     <!-- Customized Required column -->
>     <component id="requiredColumnValue" type="Block"/>
>
>     <component id="requiredSelect" type="PropertySelection">
>         <binding name="model" value=" row.availRequired"/>
>         <binding name="value" value="row.required"/>
>     </component>
>
>
>     <!-- Customized Parameter column -->
>
>     <component id="parameterTable" type="contrib:TableView">
>          <binding name="source" value="paramColumns"/>
>         <binding name="columns" value="literal:!deleteActions:
> :deleteActions, !parameter:Parameter:parameter, !value:Value:value"/>
>      </component>
>
>     <component id="parameterTableColumns"
> type="contrib:TableColumns"></component>
>
>     <component id="parameterTablePages" type="contrib:TablePages"/>
>
>     <component id="parameterTableRows" type="contrib:TableRows">
>              <binding name="row" value="currentEntry"/> <!-- The value
> object of the current row being rendered -->
>     </component>
>
>     <component id="parameterTableValues" type="contrib:TableValues"/>
>
>     <component id="deleteActionsColumnValue" type="Block"/>
>
>      <component id="paramDeleteColumn" type="ImageSubmit">
>          <binding name="listener" value="listener:doDeleteParamColumn"/>
>          <binding name="parameters" value="currentEntry"/>
>          <binding name="image" value="ognl:
> components.reportMapAssets.assets.deleteAction"/>
>          <binding name="alt" value="literal:Delete Report Map"/>
>      </component>
>