You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by "seloha ." <se...@hotmail.com> on 2005/08/23 18:11:45 UTC

Tap 4.0 Tables

I am using the new contrib:Table since I believe contrib:FormTable is to de 
deprecated.

I think I have a very stupid mistake somewhere. I am trying to update some 
fields, when I get the list of table data objects they still have the old 
information prior to submission. If I put an invalid entry the form fails 
validation an has the new data redisplayed with an error message, this 
indicates something is working!

I am using beta-5 which was checked-out from the cvs about a week ago.

Some of the code:

.page:

  <property name="priceCalcData"/>

  <component id="priceCalcTable" type="contrib:Table">
    <binding name="source" value="ognl:priceCalcData"/>
    <binding name="convertor" value="ognl:priceCalcDataItemConvertor"/>
    <binding name="columns"
        value="literal:
            airport,
            areaPostcode,
            noOfPeople,
            !price,
            !exclusivePrice,
            !onewayPrice,
            !onewayExclusivePrice"/>
    <binding name="rowsClass" value="ognl:'priceCalcRowbgcolor' + 
beans.evenOdd.next"/>
    <binding name="pageSize" value="literal:20"/>
    <binding name="row" value="ognl:rowObj"/>
    <binding name="persist" value="literal:session"/>
  </component>

example of one of the columns to update:

  <component id="priceColumnValue" type="Block"/>
  <component id="editablePrice" type="TextField">
    <binding name="displayName" value="literal:Price"/>
    <binding name="value" 
value="ognl:components.priceCalcTable.tableRow.price"/>
    <binding name="translator" value="translator:number,pattern=#.##"/>
    <binding name="validators" value="validators:required,min=0"/>
    <binding name="id" value="ognl:'price' + rowId"/>
  </component>

template:

          <table class="priceCalcTable" jwcid="priceCalcTable">
            <tr jwcid="airportColumnValue">
              <td jwcid="displayAirport" class="priceCalcRowColor"/>
            </tr>
            <tr jwcid="areaPostcodeColumnValue">
              <td jwcid="displayAreaPostcode"/>
            </tr>
            <tr jwcid="noOfPeopleColumnValue">
              <td jwcid="displayNoOfPeople" class="priceCalcRowColor"/>
            </tr>
            <tr jwcid="priceColumnValue">
              <td jwcid="editablePrice" class="priceCalcRowColor" 
align="right" size="8"/>
            </tr>
            <tr jwcid="exclusivePriceColumnValue">
              <td jwcid="editableExclusivePrice" class="priceCalcRowColor" 
align="right" size="8"/>
            </tr>
            <tr jwcid="onewayPriceColumnValue">
              <td jwcid="editableOnewayPrice" class="priceCalcRowColor" 
align="right" size="8"/>
            </tr>
            <tr jwcid="onewayExclusivePriceColumnValue">
              <td jwcid="editableOnewayExclusivePrice" 
class="priceCalcRowColor" align="right" size="8"/>
            </tr>
          </table>

java in the form listener:

                if (validationDelegate.getHasErrors()) {
                    return;
                }

                List priceCalcData = getPriceCalcData();

this last line retrieves the original values prior to submission.

I probably haven't provided enough code or detail but maybe someone could 
point me in the right direction. It almost works (funny), method 
getPriceCalcData() is declared as:

    public abstract List getPriceCalcData();

As previously stated the validation returns the page with the entered 
incorrect value. It is almost like I am reading the value at the wrong time, 
but there is only one listener on the form?

Any help appreciated,

Paul



---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-user-help@jakarta.apache.org


Re: Tap 4.0 Tables

Posted by "seloha ." <se...@hotmail.com>.
Thankyou very much, this:

<binding name="keyExpression" value="literal: id"/>

did the trick nicely.

I do not know whether you are aware of a bug? in sorting columns. When I 
press the column link to sort I get an 
org.apache.hivemind.ApplicationRuntimeException, with:

Either the tableModel parameter or both source and columns parameters must 
be specified by component EditPrices/priceCalcTable.tableView

followed by Stack Trace:

# 
org.apache.tapestry.contrib.table.components.TableView.getTableModel(TableView.java:220)
# 
org.apache.tapestry.contrib.table.components.inserted.SimpleTableColumnComponent.columnSelected(SimpleTableColumnComponent.java:149)
# sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
# 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
# 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
# java.lang.reflect.Method.invoke(Method.java:324)
# 
org.apache.tapestry.listener.ListenerMethodInvokerImpl.invokeTargetMethod(ListenerMethodInvokerImpl.java:214)
# 
org.apache.tapestry.listener.ListenerMethodInvokerImpl.invokeListenerMethod(ListenerMethodInvokerImpl.java:155)
# 
org.apache.tapestry.listener.ListenerMethodInvokerImpl.searchAndInvoke(ListenerMethodInvokerImpl.java:124)
# 
org.apache.tapestry.listener.ListenerMethodInvokerImpl.invokeListenerMethod(ListenerMethodInvokerImpl.java:77)
# 
org.apache.tapestry.listener.SyntheticListener.actionTriggered(SyntheticListener.java:51)
# 
org.apache.tapestry.listener.ListenerInvokerTerminator.invokeListener(ListenerInvokerTerminator.java:51)
# 
$ListenerInvoker_105ecb1b95c.invokeListener($ListenerInvoker_105ecb1b95c.java)
# org.apache.tapestry.link.DirectLink.trigger(DirectLink.java:105)
# org.apache.tapestry.engine.DirectService.service(DirectService.java:132)
# $IEngineService_105ecb1b9b5.service($IEngineService_105ecb1b9b5.java)
# 
org.apache.tapestry.services.impl.EngineServiceOuterProxy.service(EngineServiceOuterProxy.java:65)
# org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:254)
# 
org.apache.tapestry.services.impl.InvokeEngineTerminator.service(InvokeEngineTerminator.java:60)
# 
$WebRequestServicer_105ecb1b992.service($WebRequestServicer_105ecb1b992.java)
# 
org.apache.tapestry.services.impl.DisableCachingFilter.service(DisableCachingFilter.java:48)
# 
$WebRequestServicerFilter_105ecb1b994.service($WebRequestServicerFilter_105ecb1b994.java)
# 
$WebRequestServicer_105ecb1b996.service($WebRequestServicer_105ecb1b996.java)
# 
$WebRequestServicer_105ecb1b98e.service($WebRequestServicer_105ecb1b98e.java)
# 
org.apache.tapestry.services.impl.WebRequestServicerPipelineBridge.service(WebRequestServicerPipelineBridge.java:56)
# 
$ServletRequestServicer_105ecb1b972.service($ServletRequestServicer_105ecb1b972.java)
# 
org.apache.tapestry.request.DecodedRequestInjector.service(DecodedRequestInjector.java:55)
# 
$ServletRequestServicerFilter_105ecb1b96e.service($ServletRequestServicerFilter_105ecb1b96e.java)
# 
$ServletRequestServicer_105ecb1b974.service($ServletRequestServicer_105ecb1b974.java)
# 
org.apache.tapestry.multipart.MultipartDecoderFilter.service(MultipartDecoderFilter.java:52)
# 
$ServletRequestServicerFilter_105ecb1b96c.service($ServletRequestServicerFilter_105ecb1b96c.java)
# 
$ServletRequestServicer_105ecb1b974.service($ServletRequestServicer_105ecb1b974.java)
# 
org.apache.tapestry.services.impl.SetupRequestEncoding.service(SetupRequestEncoding.java:53)
# 
$ServletRequestServicerFilter_105ecb1b970.service($ServletRequestServicerFilter_105ecb1b970.java)
# 
$ServletRequestServicer_105ecb1b974.service($ServletRequestServicer_105ecb1b974.java)
# 
$ServletRequestServicer_105ecb1b966.service($ServletRequestServicer_105ecb1b966.java)
# 
org.apache.tapestry.ApplicationServlet.doService(ApplicationServlet.java:145)
# org.apache.tapestry.ApplicationServlet.doGet(ApplicationServlet.java:101)
# javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
# javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
# 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:284)
# 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
# 
net.sf.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:292)
# 
net.sf.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:305)
# 
net.sf.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:303)
# 
net.sf.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:226)
# 
net.sf.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:303)
# 
net.sf.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:173)
# 
net.sf.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:125)
# 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:233)
# 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
# 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:257)
# 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
# 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:567)
# 
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:245)
# 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:199)
# 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
# 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:567)
# 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:184)
# 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
# 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:164)
# 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
# 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:567)
# 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:156)
# 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
# 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:567)
# org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)
# org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:206)
# org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:833)
# 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:732)
# org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:619)
# 
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:688)
# java.lang.Thread.run(Thread.java:552)

As seen below the source and columns parameters are specified, I assume this 
is due to the major changes you are currently making.

Thanks again,

Paul


Mind Bridge wrote:

Hi,

I believe the reason is that the priceCalcData values get serialized into 
the form, and when they get deserialized upon submit, the deserialized items 
are different physical objects.

Here is a simple solution: If your priceCalcData have a property that is a 
primary key, say 'id', you could add the following parameter to Table:

<binding name="keyExpression" value="literal: id"/>

That says that the OGNL expression 'id' will extract the primary key of the 
objects in 'source'.
You will kill two birds with one stone that way:
   - the objects will not be serialized -- only their IDs will be stored as 
Hidden fields and that would make the HTML much nicer
   - Upon rewind (when the form is submitted) the component will try to 
match the keys in the Hidden fields with the keys of the objects in 
'source'. The object with a matching primary key is then used. As a result, 
no new physical object is created as with serialization, and modifications 
apply to the original object (the one in 'source')

Try this -- it may help.


An alternative to the above is also to make the Table volatile:

<binding name="volatile" value="true"/>

That prevent the table from making Hidden fields (behaves like the Table 
from 3.x), but that will likely cause a problem if 'source' changes between 
requests (e.g. external database mods, mutiple browser windows, etc). So 
this method is usually not appropriate.

Hope this is of use,
-mb

seloha . wrote:

	 	I am using the new contrib:Table since I believe contrib:FormTable is to 
de deprecated.

I think I have a very stupid mistake somewhere. I am trying to update some 
fields, when I get the list of table data objects they still have the old 
information prior to submission. If I put an invalid entry the form fails 
validation an has the new data redisplayed with an error message, this 
indicates something is working!

I am using beta-5 which was checked-out from the cvs about a week ago.

Some of the code:

.page:

<property name="priceCalcData"/>

<component id="priceCalcTable" type="contrib:Table">
   <binding name="source" value="ognl:priceCalcData"/>
   <binding name="convertor" value="ognl:priceCalcDataItemConvertor"/>
   <binding name="columns"
       value="literal:
           airport,
           areaPostcode,
           noOfPeople,
           !price,
           !exclusivePrice,
           !onewayPrice,
           !onewayExclusivePrice"/>
   <binding name="rowsClass" value="ognl:'priceCalcRowbgcolor' + 
beans.evenOdd.next"/>
   <binding name="pageSize" value="literal:20"/>
   <binding name="row" value="ognl:rowObj"/>
   <binding name="persist" value="literal:session"/>
</component>

example of one of the columns to update:

<component id="priceColumnValue" type="Block"/>
<component id="editablePrice" type="TextField">
   <binding name="displayName" value="literal:Price"/>
   <binding name="value" 
value="ognl:components.priceCalcTable.tableRow.price"/>
   <binding name="translator" value="translator:number,pattern=#.##"/>
   <binding name="validators" value="validators:required,min=0"/>
   <binding name="id" value="ognl:'price' + rowId"/>
</component>

template:

         <table class="priceCalcTable" jwcid="priceCalcTable">
           <tr jwcid="airportColumnValue">
             <td jwcid="displayAirport" class="priceCalcRowColor"/>
           </tr>
           <tr jwcid="areaPostcodeColumnValue">
             <td jwcid="displayAreaPostcode"/>
           </tr>
           <tr jwcid="noOfPeopleColumnValue">
             <td jwcid="displayNoOfPeople" class="priceCalcRowColor"/>
           </tr>
           <tr jwcid="priceColumnValue">
             <td jwcid="editablePrice" class="priceCalcRowColor" 
align="right" size="8"/>
           </tr>
           <tr jwcid="exclusivePriceColumnValue">
             <td jwcid="editableExclusivePrice" class="priceCalcRowColor" 
align="right" size="8"/>
           </tr>
           <tr jwcid="onewayPriceColumnValue">
             <td jwcid="editableOnewayPrice" class="priceCalcRowColor" 
align="right" size="8"/>
           </tr>
           <tr jwcid="onewayExclusivePriceColumnValue">
             <td jwcid="editableOnewayExclusivePrice" 
class="priceCalcRowColor" align="right" size="8"/>
           </tr>
         </table>

java in the form listener:

               if (validationDelegate.getHasErrors()) {
                   return;
               }

               List priceCalcData = getPriceCalcData();

this last line retrieves the original values prior to submission.

I probably haven't provided enough code or detail but maybe someone could 
point me in the right direction. It almost works (funny), method 
getPriceCalcData() is declared as:

   public abstract List getPriceCalcData();

As previously stated the validation returns the page with the entered 
incorrect value. It is almost like I am reading the value at the wrong time, 
but there is only one listener on the form?

Any help appreciated,

Paul



---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-user-help@jakarta.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-user-help@jakarta.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-user-help@jakarta.apache.org


Re: Tap 4.0 Tables

Posted by Mind Bridge <mi...@yahoo.com>.
Hi,

I believe the reason is that the priceCalcData values get serialized 
into the form, and when they get deserialized upon submit, the 
deserialized items are different physical objects.

Here is a simple solution: If your priceCalcData have a property that is 
a primary key, say 'id', you could add the following parameter to Table:

<binding name="keyExpression" value="literal: id"/>

That says that the OGNL expression 'id' will extract the primary key of 
the objects in 'source'.
You will kill two birds with one stone that way:
    - the objects will not be serialized -- only their IDs will be 
stored as Hidden fields and that would make the HTML much nicer
    - Upon rewind (when the form is submitted) the component will try to 
match the keys in the Hidden fields with the keys of the objects in 
'source'. The object with a matching primary key is then used. As a 
result, no new physical object is created as with serialization, and 
modifications apply to the original object (the one in 'source')

Try this -- it may help.


An alternative to the above is also to make the Table volatile:

<binding name="volatile" value="true"/>

That prevent the table from making Hidden fields (behaves like the Table 
from 3.x), but that will likely cause a problem if 'source' changes 
between requests (e.g. external database mods, mutiple browser windows, 
etc). So this method is usually not appropriate.

Hope this is of use,
-mb

seloha . wrote:

> I am using the new contrib:Table since I believe contrib:FormTable is 
> to de deprecated.
>
> I think I have a very stupid mistake somewhere. I am trying to update 
> some fields, when I get the list of table data objects they still have 
> the old information prior to submission. If I put an invalid entry the 
> form fails validation an has the new data redisplayed with an error 
> message, this indicates something is working!
>
> I am using beta-5 which was checked-out from the cvs about a week ago.
>
> Some of the code:
>
> .page:
>
>  <property name="priceCalcData"/>
>
>  <component id="priceCalcTable" type="contrib:Table">
>    <binding name="source" value="ognl:priceCalcData"/>
>    <binding name="convertor" value="ognl:priceCalcDataItemConvertor"/>
>    <binding name="columns"
>        value="literal:
>            airport,
>            areaPostcode,
>            noOfPeople,
>            !price,
>            !exclusivePrice,
>            !onewayPrice,
>            !onewayExclusivePrice"/>
>    <binding name="rowsClass" value="ognl:'priceCalcRowbgcolor' + 
> beans.evenOdd.next"/>
>    <binding name="pageSize" value="literal:20"/>
>    <binding name="row" value="ognl:rowObj"/>
>    <binding name="persist" value="literal:session"/>
>  </component>
>
> example of one of the columns to update:
>
>  <component id="priceColumnValue" type="Block"/>
>  <component id="editablePrice" type="TextField">
>    <binding name="displayName" value="literal:Price"/>
>    <binding name="value" 
> value="ognl:components.priceCalcTable.tableRow.price"/>
>    <binding name="translator" value="translator:number,pattern=#.##"/>
>    <binding name="validators" value="validators:required,min=0"/>
>    <binding name="id" value="ognl:'price' + rowId"/>
>  </component>
>
> template:
>
>          <table class="priceCalcTable" jwcid="priceCalcTable">
>            <tr jwcid="airportColumnValue">
>              <td jwcid="displayAirport" class="priceCalcRowColor"/>
>            </tr>
>            <tr jwcid="areaPostcodeColumnValue">
>              <td jwcid="displayAreaPostcode"/>
>            </tr>
>            <tr jwcid="noOfPeopleColumnValue">
>              <td jwcid="displayNoOfPeople" class="priceCalcRowColor"/>
>            </tr>
>            <tr jwcid="priceColumnValue">
>              <td jwcid="editablePrice" class="priceCalcRowColor" 
> align="right" size="8"/>
>            </tr>
>            <tr jwcid="exclusivePriceColumnValue">
>              <td jwcid="editableExclusivePrice" 
> class="priceCalcRowColor" align="right" size="8"/>
>            </tr>
>            <tr jwcid="onewayPriceColumnValue">
>              <td jwcid="editableOnewayPrice" class="priceCalcRowColor" 
> align="right" size="8"/>
>            </tr>
>            <tr jwcid="onewayExclusivePriceColumnValue">
>              <td jwcid="editableOnewayExclusivePrice" 
> class="priceCalcRowColor" align="right" size="8"/>
>            </tr>
>          </table>
>
> java in the form listener:
>
>                if (validationDelegate.getHasErrors()) {
>                    return;
>                }
>
>                List priceCalcData = getPriceCalcData();
>
> this last line retrieves the original values prior to submission.
>
> I probably haven't provided enough code or detail but maybe someone 
> could point me in the right direction. It almost works (funny), method 
> getPriceCalcData() is declared as:
>
>    public abstract List getPriceCalcData();
>
> As previously stated the validation returns the page with the entered 
> incorrect value. It is almost like I am reading the value at the wrong 
> time, but there is only one listener on the form?
>
> Any help appreciated,
>
> Paul
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: tapestry-user-help@jakarta.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-user-help@jakarta.apache.org


Re: Tap 4.0 Tables

Posted by "seloha ." <se...@hotmail.com>.
Thanks for the reply Scott. The thing that I find strange is if I purposely 
incorrectly enter data that will throw a validation error the incorrectly 
entered data is returned with the error message. This indicates that the 
entered data is getting picked up, but how?

Thanks again

Paul




seloha . wrote:

	 	I am using the new contrib:Table since I believe contrib:FormTable is to 
de deprecated.

I think I have a very stupid mistake somewhere. I am trying to update some 
fields, when I get the list of table data objects they still have the old 
information prior to submission. If I put an invalid entry the form fails 
validation an has the new data redisplayed with an error message, this 
indicates something is working!

I am using beta-5 which was checked-out from the cvs about a week ago.

Some of the code:

.page:

<property name="priceCalcData"/>

<component id="priceCalcTable" type="contrib:Table">
   <binding name="source" value="ognl:priceCalcData"/>
   <binding name="convertor" value="ognl:priceCalcDataItemConvertor"/>
   <binding name="columns"
       value="literal:
           airport,
           areaPostcode,
           noOfPeople,
           !price,
           !exclusivePrice,
           !onewayPrice,
           !onewayExclusivePrice"/>
   <binding name="rowsClass" value="ognl:'priceCalcRowbgcolor' + 
beans.evenOdd.next"/>
   <binding name="pageSize" value="literal:20"/>
   <binding name="row" value="ognl:rowObj"/>
   <binding name="persist" value="literal:session"/>
</component>

example of one of the columns to update:

<component id="priceColumnValue" type="Block"/>
<component id="editablePrice" type="TextField">
   <binding name="displayName" value="literal:Price"/>
   <binding name="value" 
value="ognl:components.priceCalcTable.tableRow.price"/>
   <binding name="translator" value="translator:number,pattern=#.##"/>
   <binding name="validators" value="validators:required,min=0"/>
   <binding name="id" value="ognl:'price' + rowId"/>
</component>

template:

         <table class="priceCalcTable" jwcid="priceCalcTable">
           <tr jwcid="airportColumnValue">
             <td jwcid="displayAirport" class="priceCalcRowColor"/>
           </tr>
           <tr jwcid="areaPostcodeColumnValue">
             <td jwcid="displayAreaPostcode"/>
           </tr>
           <tr jwcid="noOfPeopleColumnValue">
             <td jwcid="displayNoOfPeople" class="priceCalcRowColor"/>
           </tr>
           <tr jwcid="priceColumnValue">
             <td jwcid="editablePrice" class="priceCalcRowColor" 
align="right" size="8"/>
           </tr>
           <tr jwcid="exclusivePriceColumnValue">
             <td jwcid="editableExclusivePrice" class="priceCalcRowColor" 
align="right" size="8"/>
           </tr>
           <tr jwcid="onewayPriceColumnValue">
             <td jwcid="editableOnewayPrice" class="priceCalcRowColor" 
align="right" size="8"/>
           </tr>
           <tr jwcid="onewayExclusivePriceColumnValue">
             <td jwcid="editableOnewayExclusivePrice" 
class="priceCalcRowColor" align="right" size="8"/>
           </tr>
         </table>

java in the form listener:

               if (validationDelegate.getHasErrors()) {
                   return;
               }

               List priceCalcData = getPriceCalcData();

this last line retrieves the original values prior to submission.

I probably haven't provided enough code or detail but maybe someone could 
point me in the right direction. It almost works (funny), method 
getPriceCalcData() is declared as:

   public abstract List getPriceCalcData();

As previously stated the validation returns the page with the entered 
incorrect value. It is almost like I am reading the value at the wrong time, 
but there is only one listener on the form?

Any help appreciated,

Paul



---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-user-help@jakarta.apache.org

scott wrote:

Finally else who has run into this issue. I created a bug for this about a 
month ago and it hasn't been looked at yet. Take a look at 
http://issues.apache.org/jira/browse/TAPESTRY-436

scott.

--

Scott F. Walter Scott F. Walter
Principal Consultant
Vivare, Inc.

E: scott.walter@vivare.com
E: scott@scottwalter.com
Visit scottwalter.com <http://scottwalter.com> --Point. Click. Explore!



---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-user-help@jakarta.apache.org


Re: Tap 4.0 Tables

Posted by "Scott F. Walter" <sc...@scottwalter.com>.
seloha . wrote:

> I am using the new contrib:Table since I believe contrib:FormTable is 
> to de deprecated.
>
> I think I have a very stupid mistake somewhere. I am trying to update 
> some fields, when I get the list of table data objects they still have 
> the old information prior to submission. If I put an invalid entry the 
> form fails validation an has the new data redisplayed with an error 
> message, this indicates something is working!
>
> I am using beta-5 which was checked-out from the cvs about a week ago.
>
> Some of the code:
>
> .page:
>
>  <property name="priceCalcData"/>
>
>  <component id="priceCalcTable" type="contrib:Table">
>    <binding name="source" value="ognl:priceCalcData"/>
>    <binding name="convertor" value="ognl:priceCalcDataItemConvertor"/>
>    <binding name="columns"
>        value="literal:
>            airport,
>            areaPostcode,
>            noOfPeople,
>            !price,
>            !exclusivePrice,
>            !onewayPrice,
>            !onewayExclusivePrice"/>
>    <binding name="rowsClass" value="ognl:'priceCalcRowbgcolor' + 
> beans.evenOdd.next"/>
>    <binding name="pageSize" value="literal:20"/>
>    <binding name="row" value="ognl:rowObj"/>
>    <binding name="persist" value="literal:session"/>
>  </component>
>
> example of one of the columns to update:
>
>  <component id="priceColumnValue" type="Block"/>
>  <component id="editablePrice" type="TextField">
>    <binding name="displayName" value="literal:Price"/>
>    <binding name="value" 
> value="ognl:components.priceCalcTable.tableRow.price"/>
>    <binding name="translator" value="translator:number,pattern=#.##"/>
>    <binding name="validators" value="validators:required,min=0"/>
>    <binding name="id" value="ognl:'price' + rowId"/>
>  </component>
>
> template:
>
>          <table class="priceCalcTable" jwcid="priceCalcTable">
>            <tr jwcid="airportColumnValue">
>              <td jwcid="displayAirport" class="priceCalcRowColor"/>
>            </tr>
>            <tr jwcid="areaPostcodeColumnValue">
>              <td jwcid="displayAreaPostcode"/>
>            </tr>
>            <tr jwcid="noOfPeopleColumnValue">
>              <td jwcid="displayNoOfPeople" class="priceCalcRowColor"/>
>            </tr>
>            <tr jwcid="priceColumnValue">
>              <td jwcid="editablePrice" class="priceCalcRowColor" 
> align="right" size="8"/>
>            </tr>
>            <tr jwcid="exclusivePriceColumnValue">
>              <td jwcid="editableExclusivePrice" 
> class="priceCalcRowColor" align="right" size="8"/>
>            </tr>
>            <tr jwcid="onewayPriceColumnValue">
>              <td jwcid="editableOnewayPrice" class="priceCalcRowColor" 
> align="right" size="8"/>
>            </tr>
>            <tr jwcid="onewayExclusivePriceColumnValue">
>              <td jwcid="editableOnewayExclusivePrice" 
> class="priceCalcRowColor" align="right" size="8"/>
>            </tr>
>          </table>
>
> java in the form listener:
>
>                if (validationDelegate.getHasErrors()) {
>                    return;
>                }
>
>                List priceCalcData = getPriceCalcData();
>
> this last line retrieves the original values prior to submission.
>
> I probably haven't provided enough code or detail but maybe someone 
> could point me in the right direction. It almost works (funny), method 
> getPriceCalcData() is declared as:
>
>    public abstract List getPriceCalcData();
>
> As previously stated the validation returns the page with the entered 
> incorrect value. It is almost like I am reading the value at the wrong 
> time, but there is only one listener on the form?
>
> Any help appreciated,
>
> Paul
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: tapestry-user-help@jakarta.apache.org
>
>
Finally else who has run into this issue.  I created a bug for this 
about a month ago and it hasn't been looked at yet.  Take a look at    
http://issues.apache.org/jira/browse/TAPESTRY-436

scott.

-- 

Scott F. Walter 	Scott F. Walter
Principal Consultant
Vivare, Inc.

E: scott.walter@vivare.com
E: scott@scottwalter.com
Visit scottwalter.com <http://scottwalter.com> --Point.  Click.  Explore!




---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-user-help@jakarta.apache.org