If you contribute an appropriate ValueEncoder for Entity, you won't need
onActivate() / onPassivate(). You can use @PageActivationContext instead.


On 3 July 2014 06:11, Ilya Obshadko <ilya.obsha...@gmail.com> wrote:

> Oops my bad. I always try to forget about onPassivate ()
> That should fix it, thanks!
>
>
> On Thu, Jul 3, 2014 at 1:46 PM, Geoff Callender <
> geoff.callender.jumpst...@gmail.com> wrote:
>
> > What's "t:ac"? In the POST's Form Data, "t:ac" is the key of the field
> > that carries the page's activation context.
> >
> >
> > On 3 Jul 2014, at 12:41 pm, Geoff Callender <
> > geoff.callender.jumpst...@gmail.com> wrote:
> >
> > > Not a bug. Form bubbles up its context in the PREPARE_FOR_SUBMIT event.
> > Here's a typical way to deal with it:
> > >
> > >       void onPrepareForSubmit(Long id) {
> > >               this.id = id;
> > >               entity = retrieveFromDatabase(id);
> > >       }
> > >
> > > What should you pass in the context? At a minimum I'd recommend passing
> > all the parameters of its enclosing component. Then, in
> > onPrepareForSubmit(...) you can restore the component's parameter values
> > (like we restored this.id above) before proceeding. In this way a
> > component can behave independently rather than depending on its page.
> When
> > components get deeply nested then this is essential.
> > >
> > >
> > > If you want the page's onActivate(Long id) to be invoked, then you'll
> > need the *page's* context to include id, which you achieve by doing this
> in
> > the page:
> > >
> > >       Long onPassivate() {
> > >               return id;
> > >       }
> > >
> > > I'm guessing your page doesn't do that. Before clicking submit, the
> page
> > URL would look like this...
> > >
> > >       http://localhost:8080/application/page/12345
> > >
> > > ...and, on submit, the Form Data would include:
> > >
> > > t:ac:12345
> > >
> > > Geoff
> > >
> > >
> > > On 3 Jul 2014, at 11:59 am, Ilya Obshadko <ilya.obsha...@gmail.com>
> > wrote:
> > >
> > >> I'm not sure if this is a bug or not.
> > >>
> > >> Here's a scenario:
> > >>
> > >> Page.java
> > >>
> > >> public class Page {
> > >>   @Property
> > >>   private Entity entity;
> > >>
> > >>   void onActivate ( Long id ) {
> > >>       entity = retrieveFromDatabase ( id );
> > >>   }
> > >>
> > >> }
> > >>
> > >> Page.tml:
> > >>
> > >> <t:mycomponent entity="entity"/>
> > >>
> > >> MyComponent.tml:
> > >>
> > >> <t:form p:context="entity.id">
> > >> ...
> > >> </t:form>
> > >>
> > >>
> > >> AJAX is NOT used. If I get it right, form context must be passed to
> > >> enclosing page during form submission. However it doesn't work and
> > >> appropriate onActivate method is never called, although submission URL
> > >> looks just like expected:
> > >> http://localhost:8080/application/page.mycomponent.form/12345
> > >>
> > >> Am I missing something here? I'm using 5.4-beta6
> > >>
> > >>
> > >> --
> > >> Ilya Obshadko
> > >
> >
> >
>
>
> --
> Ilya Obshadko
>

Reply via email to