Ok, I think it's clearer to me what you're trying to do. Your first
assertion is correct; Components are not stateful. You can either put
something into the action link context or into the session to maintain your
state.

Take a look at the source for
*AbstractTextField*<http://tapestry.apache.org/tapestry5/apidocs/src-html/org/apache/tapestry/corelib/base/AbstractTextField.html#line.44>,
it stores the data using a ValidationTracker, which is stored in the
session.

Josh

On Feb 4, 2008 8:51 AM, Alexander Lamb <[EMAIL PROTECTED]> wrote:

> Well, getting close, but not quite.
>
> Indeed, the getClientId works fine, but since my component is actually
> a graph (JFreeChart) being rendered from an URL, it looks like the
> clientId is not pushed to the ActionLink created.
>
>     @SuppressWarnings("unchecked")
>     void beginRender(MarkupWriter writer) {
>       _clientId = _renderSupport.allocateClientId(_resources.getId());
>       System.out.println("--- CLIENT ID: " + _clientId);
>       System.out.println("--- RESOURCES ID: " + _resources.getId());
>       System.out.println("--- RESOURCES COMPLETE ID: " +
> _resources.getCompleteId());
>       //generate action link
>       Link link = _resources.createActionLink("chart", false, _width,
> _height);
>       Element img = writer.element("img", "src", link, "id",
> _clientId);
>
>       if(_popupWidth == 0)
>          _popupWidth = 2 * _width;
>       if(_popupHeight == 0)
>          _popupHeight = 2 * _height;
>          link = _resources.createActionLink("chart", false, _popupWidth,
> _popupHeight);
>       img.attribute("onclick", "window.open('"+link
> +"','_blank','width="+(_popupWidth+24)+", height="+(_popupHeight
> +24)+"')");
>       img.attribute("style", "cursor:pointer");
>
>          _resources.renderInformalParameters(writer);
>     }
>
>
> My trace and the HTML source generated shows very well the clientId is
> incremented correctly... but the ActionLink generated is not
> (completeId stays always as the initial id).
>
> Alex
>
> Le 4 févr. 08 à 15:45, Chris Lewis a écrit :
>
> > Alex,
> >
> > Id generation, as far as I know, does not come for free. If you want
> > to receive an id generated by T5, you have to explicitly request it.
> > You'll find this done in one of the parent classes of the field
> > elements - possibly in AbstractField. I've implemented it the same
> > way in several different components, one of which you can see here:
> >
> >
> http://code.google.com/p/gc-tapestry-components/source/browse/trunk/gc-tapestry5-components/src/main/java/net/godcode/t5c/components/SlideShow.java
> >
> > The key parts are:
> >
> >       @Inject
> >       private ComponentResources resources;
> >             @Environmental
> >       private PageRenderSupport renderSupport;
> >             /** The client-side id. */
> >       private String clientId;
> >             /* Render phase. */
> >             @SetupRender
> >       void setupRender() {
> >               clientId =
> > renderSupport.allocateClientId(resources.getId());
> >       }
> >
> > And then making sure you insert clientId into your component tag's
> > id attribute. This could probably be isolated into a mixin, or you
> > could probably just extend AbstractField. That would make sense as
> > long as your component's behavior merits the semantics of a field
> > (which it doesn't seem to).
> >
> > Hope that helps.
> >
> > chris
> >
> >
> > Alexander Lamb wrote:
> >> Hello list,
> >>
> >> It looks like custom components are not statefull.
> >>
> >> Indeed, I have a loop which contains a graph I generate and a
> >> TextField (for testing purposes), and the generated code looks like
> >> this:
> >>
> >> <div><img src="./
> >> statistics
> >> .dashboardview.enrollmentbenchmarkchart.monthserieslinechart:chart/
> >> 460/280"></div></div></td></tr><tr><td><input id="textfield_8"
> >> name="textfield_8" type="text" value="ITALY"><img alt="[Error]"
> >> class="t-error-icon t-invisible" id="textfield_8:icon" src="assets/
> >> tapestry/field-error-marker.gif"><div> IT <div><img src="./
> >> statistics
> >> .dashboardview.enrollmentbenchmarkchart.monthserieslinechart:chart/
> >> 460/280"></div></div></td></tr><tr><td><input id="textfield_9"
> >> name="textfield_9" type="text" value="NETHERLANDS"><img
> >> alt="[Error]" class="t-error-icon t-invisible"
> >> id="textfield_9:icon" src="assets/tapestry/field-error-
> >> marker.gif"><div> NL <div><img src="./
> >> statistics
> >> .dashboardview.enrollmentbenchmarkchart.monthserieslinechart:chart/
> >> 460/280"></div></div></td></tr><tr><td><input id="textfield_10"
> >> name="textfield_10" type="text" value="NORWAY"><img alt="[Error]"
> >> class="t-error-icon t-invisible" id="textfield_10:icon" src="assets/
> >> tapestry/field-error-marker.gif"><div> NO
> >> As you can see, my TextField gets incremented but not my
> >> enrollmentbenchmarkchart !
> >> Should I file a bug for this?
> >> P.S. I tried to generate the ids but it didn't work.
> >> Thanks,
> >>
> >> Alex
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >> For additional commands, e-mail: [EMAIL PROTECTED]
> >>
> >>
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


-- 
--
TheDailyTube.com. Sign up and get the best new videos on the internet
delivered fresh to your inbox.

Reply via email to