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

Reply via email to