You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Grigoris Ioannou <ho...@gmail.com> on 2008/01/12 16:54:08 UTC

T4.1.3 Tapestry-hibernate problem

Hi all,

I have a dynamic form where the user can set a dynamic number of passengers.
The html looks like:

<table jwcid="@For"
                                  source="ognl:passengerList"
                                  value="ognl:currentPassengerId"
                                  width="100%"
                                  border="0">
                                  <span jwcid="updatePassenger"/>
                             <tr class="GeneralStrText">
                               <td>Title</td>
                               <td>Name</td>
                               <td>Surname</td>
                               <td>Age</td>
                             </tr>
                             <tr>
                               <td>
                                 <input jwcid="name@TextField"
                                        value="ognl:currentPassenger.name"
                                        type="text"
                                        class="textField"
                                        maxlength="40"
                                        size="26"/>
                                 &nbsp;
                               </td>
                               <td>
                                 <input jwcid="surname@TextField"
                                        value="ognl:currentPassenger.surname
"
                                        type="text"
                                        class="textField"
                                        maxlength="40"
                                        size="26"/>
                                 &nbsp;
                               </td>
                             </tr>
                         </table>
                       </td>
                     </tr>
                   </table>

The updatePassenger is an InvokeListener that executes this code:

public void updatePassenger(IRequestCycle cycle) {
if (cycle.isRewinding()) {

setCurrentPassenger(getPassengerManager().getPassengerById(getCurrentPassengerId()));
            getPassengerManager().savePassenger(getCurrentPassenger());
} else {
            Passenger passenger =
getPassengerManager().getPassengerById(getCurrentPassengerId());
            setCurrentPassenger(passenger);
        }
    }
(The idea is that in the beginning I retrieve every Passenger's data from
the database and when the form is rewinding I store them in the database
again)

The getPassengerManager() is a class responsible for handling the Passenger
objects, based on hibernate. The savePassenger function is:

public void savePassenger(Passenger passenger) throws DataAccessException {
        try {
            getSession().saveOrUpdate(passenger);
        } catch (HibernateException e) {
            e.printStackTrace(); //nkons debug
            throw convertHibernateAccessException(e);
        }
    }

The problem is that when the user submits the form in which all these are
contained, the savePassenger is called (as it should) but nor does it update
the passengers or throw an exception. What am I doing wrong?

The thing is that in the list with passengers, I am keeping the Ids of the
passengers, not the full Passenger Object, because the DataSqueezer produced
long strings that (I believe) caused some random problems in submission:
blank screens or no reaction.

I am using Tapestry 4.1.3. Any help would be really appreciated. Thank you
in advance,

Grigoris

Re: T4.1.3 Tapestry-hibernate problem

Posted by Alejandro Scandroli <al...@gmail.com>.
Hi Grigoris

I will assume that your form is surrounding the @For component.
Advices:
 * remove the updatePassenger it will confuse things.
 * persist "passengerList" in the session
 * populate "passengerList" on pageBeginRender
 * add a "keyExpression" to the For component
 * then save all the passengers at once.

public void savePassengers() throws DataAccessException {
       try {
for (Passenger passenger : getPassengerList()) {
           getSession().saveOrUpdate(passenger);
}
       } catch (HibernateException e) {
           e.printStackTrace(); //nkons debug
           throw convertHibernateAccessException(e);
       }
   }

I hope it helps.
Regards.

--
Alejandro Scandroli
Amneris: We build process-driven web applications.
http://www.amneris.es



On Jan 12, 2008 4:54 PM, Grigoris Ioannou <ho...@gmail.com> wrote:
> Hi all,
>
> I have a dynamic form where the user can set a dynamic number of passengers.
> The html looks like:
>
> <table jwcid="@For"
>                                   source="ognl:passengerList"
>                                   value="ognl:currentPassengerId"
>                                   width="100%"
>                                   border="0">
>                                   <span jwcid="updatePassenger"/>
>                              <tr class="GeneralStrText">
>                                <td>Title</td>
>                                <td>Name</td>
>                                <td>Surname</td>
>                                <td>Age</td>
>                              </tr>
>                              <tr>
>                                <td>
>                                  <input jwcid="name@TextField"
>                                         value="ognl:currentPassenger.name"
>                                         type="text"
>                                         class="textField"
>                                         maxlength="40"
>                                         size="26"/>
>                                  &nbsp;
>                                </td>
>                                <td>
>                                  <input jwcid="surname@TextField"
>                                         value="ognl:currentPassenger.surname
> "
>                                         type="text"
>                                         class="textField"
>                                         maxlength="40"
>                                         size="26"/>
>                                  &nbsp;
>                                </td>
>                              </tr>
>                          </table>
>                        </td>
>                      </tr>
>                    </table>
>
> The updatePassenger is an InvokeListener that executes this code:
>
> public void updatePassenger(IRequestCycle cycle) {
> if (cycle.isRewinding()) {
>
> setCurrentPassenger(getPassengerManager().getPassengerById(getCurrentPassengerId()));
>             getPassengerManager().savePassenger(getCurrentPassenger());
> } else {
>             Passenger passenger =
> getPassengerManager().getPassengerById(getCurrentPassengerId());
>             setCurrentPassenger(passenger);
>         }
>     }
> (The idea is that in the beginning I retrieve every Passenger's data from
> the database and when the form is rewinding I store them in the database
> again)
>
> The getPassengerManager() is a class responsible for handling the Passenger
> objects, based on hibernate. The savePassenger function is:
>
> public void savePassenger(Passenger passenger) throws DataAccessException {
>         try {
>             getSession().saveOrUpdate(passenger);
>         } catch (HibernateException e) {
>             e.printStackTrace(); //nkons debug
>             throw convertHibernateAccessException(e);
>         }
>     }
>
> The problem is that when the user submits the form in which all these are
> contained, the savePassenger is called (as it should) but nor does it update
> the passengers or throw an exception. What am I doing wrong?
>
> The thing is that in the list with passengers, I am keeping the Ids of the
> passengers, not the full Passenger Object, because the DataSqueezer produced
> long strings that (I believe) caused some random problems in submission:
> blank screens or no reaction.
>
> I am using Tapestry 4.1.3. Any help would be really appreciated. Thank you
> in advance,
>
> Grigoris
>

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