Sorry my previous response a bit short. I was on my phone. Something like
this hibernate example should work. It's better to store the query
parameters in the URL instead of the session. If you use the session
returning to the page will rerun the last query which seems a bit weird for
a web app. All the work is done in setupRender instead of onSuccess because
onSuccess ends with a redirect so no page is rendered.

@Property
List<User> users;

@Property
@ActivationRequestParameter
String lastName;

@Inject
Session session;

@SetupRender
void setupRender() {
      if ( lastName != null ) {
          users = session.createQuery(" from User where lastName =
:lastName").setParameter("lastName",lastName).list();
      }
}




On Tuesday, April 26, 2016, Morgan Hautman <morgan.haut...@gmail.com> wrote:

> Hi,
>
> The problem was that I had no get/setters in my Bean I displayed..
>
> Now it renders well on the first page but when I click on the second page I
> have:
>
> Caused by: org.apache.tapestry5.ioc.util.UnknownValueException: Could not
> find a coercion from type java.lang.String to type java.util.Set.
>
> I think this is because the url looks like this:
>
> http://localhost:8090/***/searchstreet.grid.pager/2?t:ac=model.Street$0040141f225/model.Street$0040868971
> .
> ..
>
> And Tapestry thinks "model.Street$0040141f225" is a String but it should be
> a Bean.
>
> I tried adding Serializable on my Street bean but it doesn't change the
> error.
>
> Any idea?
>
> Regards,
> Morgan
>
>
> 2016-04-25 16:05 GMT+02:00 Barry Books <trs...@gmail.com <javascript:;>>:
>
> > Use @pageactvation context and put what's in your onSucess method in
> > setupRender
> >
> > On Monday, April 25, 2016, Morgan Hautman <morgan.haut...@gmail.com
> <javascript:;>>
> > wrote:
> >
> > > Hi,
> > >
> > > Thank you guys.
> > > I first tried the fix stated by Felix (@PageActivationContext) but it
> > > doesn't work.
> > > I then tried the ajax way Nathan provided and I have better results but
> > my
> > > grid shows 4 pages/links but I don't see any data.
> > >
> > > I added
> > >
> > >         <t:zone t:id="zoneGrid" id="zoneGrid">
> > >             <div/>
> > >             <t:grid source="streets" row="street">
> > >             *[Grid here]*
> > >             </t:grid>
> > >         </t:zone>
> > >
> > > but still no luck, any one has a pointer?
> > >
> > > Regards,
> > > Morgan
> > >
> > > 2016-04-25 12:07 GMT+02:00 Nathan Quirynen <
> nat...@pensionarchitects.be <javascript:;>
> > > <javascript:;>>:
> > >
> > > > Hey,
> > > >
> > > > By returning "this" in the onSuccess event, a redirect happens
> > resulting
> > > > in a new request. If you want to preserve data between requests, you
> > will
> > > > have to save it into the http session.
> > > > If you add http session persistence, the data will be available
> after a
> > > > new request. <http://tapestry.apache.org/persistent-page-data.html>
> > > >
> > > > Simple example for your case:
> > > >
> > > > @Persist
> > > > @Property
> > > > private Set<Street> streets;||
> > > >
> > > >
> > > > Be careful: in this case the whole streets set is saved into the http
> > > > session and will remain there until the end of the session (or until
> > you
> > > > remove it manually).
> > > > You could also persist the form vaues instead and then in setupRender
> > > > event fill the trees set based on these values.
> > > > Also you can make use of PersistenceConstants.FLASH to let Tapestry
> > > remove
> > > > it from the session after first access automatically.
> > > > See more info:
> http://tapestry.apache.org/persistent-page-data.html||
> > > >
> > > > Another option is making use of AJAX where the updated grid html is
> > sent
> > > > back in the response and updated on the client side. If you want to
> > > achieve
> > > > this you'll need to add a Zone around the grid and make your Form
> > submit
> > > > with AJAX.
> > > >
> > > > Your case:
> > > >
> > > > <t:form t:zone="zoneGrid">
> > > >     ...
> > > >     <t:zone t:id="zoneGrid" id="zoneGrid"
> > > >         <t:grid source="streets" row="street">
> > > >         </t:grid>
> > > >     </t:zone>
> > > > <t:form>
> > > >
> > > > @Inject
> > > > private AjaxResponseRenderer ajax;
> > > > @InjectComponent
> > > > private Zone zoneGrid;
> > > >
> > > > void onSuccess() {
> > > >     ...
> > > >     ajax.addRender(zoneGrid);
> > > > }
> > > >
> > > > See more info: http://tapestry.apache.org/ajax-and-zones.html
> > > >
> > > >
> > > > Hope this helps u a bit.
> > > > Nathan
> > > >
> > > >
> > > > On 25/04/16 11:05, Morgan Hautman wrote:
> > > >
> > > >> Hi,
> > > >>
> > > >> I'm trying to make a make grid update when submitting a form within
> > the
> > > >> same page.
> > > >>
> > > >> Here is the code:
> > > >> https://gist.github.com/mhautman/e178fdcca46331e1f4932b1cd7074de7
> > > >>
> > > >> The page gets refreshed but the table/source doesn't seem to be
> > updated.
> > > >>
> > > >> Any help is greatly appreciated.
> > > >>
> > > >> Regards,
> > > >> Morgan
> > > >>
> > > >>
> > > >
> > >
> >
>

Reply via email to