Dear Tapestry users,

I do not understand what @InjectPage actually does, can somebody please help me.
I've expected that @InjectPage should return a fresh page from the
pool, so that I can use it e.g. for creating page links with needed
parameters.
But if I try to inject a page in the same page class, it actually
injects "this" instead of a fresh page instance.

Example:
Say we have a Product page showing some product details.
It also shows links to related products (link to the same page but
with different parameter).

public class Product {

    private String name;

    void onActivate(String param) {
        this.name = param;
    }

    Object[] onPassivate() {
        return new Object[] { name };
    }

    @InjectPage
    private Product productPage;

    // in real life this method could be in a separate component
    public Object[] getPageLinkContext() {
        System.out.println("this=" + this);
        System.out.println("productPage=" + productPage);
        productPage.setName("another");
        return productPage.onPassivate();
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

Product.tml:
<html t:type="layout" title="MyPage"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd";
xmlns:p="tapestry:parameter">
    This product = ${name}
    <t:pagelink page="Product" context="pageLinkContext">related
product</t:pagelink>
    This product = ${name}
</html>

What I expect is that value of "name" should not change after PageLink
component have called the getPageLinkContext() method.
But actual generated HTML is (for http://localhost:8080/myapp/product/initial):

   This product = initial
   <a href="/myapp/product/another">related product</a>
   This product = another

System output shows that the "productPage" is the same instance as "this":

this=com.example.pages.prod...@90e1b2
productpage=com.example.pages.prod...@90e1b2

Is it the correct @InjectPage behaviour ?
Am I doing something lame ?

Thanks in advance,
Albert

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

Reply via email to