That's exactly what I have implemented.

For that case I implemented an EnhancementWorker that overrides the RenderComponent method and adds a stack that tracks the whole rendering process.
The stack is stored in the RequestCycle.

I used it for sofisticated security decisions during rendering. The security adds declarative security based on method bindings, with the benefit that you can develop pages like you are used to and adding security constraints later on.

But my problem is that I render twice. First time to get the RenderingHierarchy and doing security based decisions (eg. removing components that are not allowed for the current user/context) and the second time to render the output.

Because the FormSupport is not aware of my mechanism some hidden fields are rendered twice. Has anyone an idea how I can get arround it?

@Howard @Jessie: I would like to contribute my security code

Kind regards,
             Robert



My Problem is that

Jesse Kuhnert schrieb:

Ok, I like that solution :) Much better than what I came up with. heh

I noticed a side effect of your proposed method would also start to pave the way towards making direct (or as much direct as possible) component renders
possible.

On 7/31/06, Howard Lewis Ship <[EMAIL PROTECTED]> wrote:


I'm always a little careful about introducing new properties into
components.

What's really needed is a way to track the render stack: what
components are actively rendering.

How about this:

IRequestCycle adds methods to track a stack of rendering objects.

Add methods to IRequestCycle to push, pop and query the stack.

Change AbstractComponent.render() to push (before renderComponent() )
and pop (in the finally block) the stack.

This gives you a rich amount of information, is relatively cheap at
runtime, and doesn't introduce new properties into the base component
classes.

On 7/31/06, Jesse Kuhnert <[EMAIL PROTECTED]> wrote:
> Oh. That could be done, but I had originally thought that method felt a
> little overly verbose for these things.
>
> With the current form people sometimes need to define an @Any component
to
> encapsulate blocks to be updated, but there are plenty of scenerios
where
> they could just as easily specify an existing component as the "block"
to
> update.
>
> I still think having to use special block components makes the API feel
less
> "sexy"/intuitive to me, but if you really think so I can give it a try.
>
> On 7/31/06, Howard Lewis Ship <[EMAIL PROTECTED]> wrote:
> >
> > I was hoping that you wouldn't need the parent property if you require
> > the use of an AjaxBlock for this purpose. I suspect it may take a
> > little bit of retooling inside the partial rendering code.
> >
> > On 7/31/06, Jesse Kuhnert <[EMAIL PROTECTED]> wrote:
> > > That sounds perfectly reasonable to me.  To summarize my
> > interpretations:
> > >
> > > -) Rename get/set Parent to something more descriptive of what it's
> > doing,
> > > like encloser.
> > >
> > > -) Create and test some form of Block component that can properly
handle
> > the
> > > encloser semantics to ensure the logic works for all (known) use
cases.
> > >
> > > On 7/31/06, Howard Lewis Ship <[EMAIL PROTECTED]> wrote:
> > > >
> > > > So, parent would be "encloser".
> > > >
> > > > This works, to a point, but is limited in that if the body of the > > > > component being partially rendered renders a Block, the components
in
> > > > the Block will not be "enclosed" by the target component.
> > > >
> > > > Could you have a special AjaxBlock compoonent that fills in this
edge
> > > > case?
> > > >
> > > > Tapestry 1.0 had the notion of maintaining a stack of rendering
> > > > components. That idea will likely resurface, in another form, in
T5.
> > > >
> > > > On 7/31/06, Jesse Kuhnert <[EMAIL PROTECTED]> wrote:
> > > > > It makes me nervous too. (another reason to want T5)
> > > > >
> > > > > My basic problem is that container doesn't return what I want.
(in
> > the
> > > > way
> > > > > that I'm doing it) For instance, suppose I had the following
html
> > > > snippet:
> > > > >
> > > > > <div jwcid="[EMAIL PROTECTED]">
> > > > >     <span jwcid="@If" condition="ognl:fooTrue()">
> > > > >         Some textual content
> > > > >         <span jwcid="@Script" scriptPath="Sample.script" />
> > > > >    </span>
> > > > > </div>
> > > > >
> > > > > In my "ajax" logic someone might say that they want the
component
> > with
> > > > id
> > > > > "any" to be updated (have its IMarkupWriter content captured and
> > sent
> > > > back
> > > > > to browser via XHR, but nothing else) in a request.
> > > > >
> > > > > The most intuitive thing to do (which is what tacos
tries/attempted
> > to
> > > > do )
> > > > > in this situation is to not only update the content of the "any"
> > > > component,
> > > > > but also any component it contains.
> > > > >
> > > > > Now my logic is such that I look at each component render
> > individually.
> > > > When
> > > > > I get to the embedded Script component referenced above I need
to
> > check
> > > > and
> > > > > see if it should get a valid IMarkupWriter. Calling
getContainer()
> > will
> > > > > return the Page/Body in this instance, not the "any" component.
> > > > >
> > > > > This makes sense when dealing with ognl/template semantics, but
not
> > in
> > > > the
> > > > > sense of knowing who contains you in the context of html blocks.
> > > > >
> > > > > The most obvious thing to do was set a temporary "parent" when
> > adding an
> > > > > IRender to a components Body.
> > > > >
> > > > > I didn't want these methods exposed to the public IComponent
API,
> > but
> > > > don't
> > > > > currently know of a better way to do it. (that doesn't involve
> > javassist
> > > > > enhancements)
> > > > >
> > > > > What are your thoughts in the context of what I just went over?
Is
> > it a
> > > > > matter of whether or not we want this kind of logic exposed to
the
> > > > public
> > > > > API's or just the logic itself in general?
> > > > >
> > > > > On 7/31/06, Howard Lewis Ship <[EMAIL PROTECTED]> wrote:
> > > > > >
> > > > > > This makes me nervous. I don't understand how parent would be
> > > > > > different from container (and existing, rigid, structural
> > property).
> > > > > >
> > > > > >
> > > > > > On 7/31/06, Jesse Kuhnert <[EMAIL PROTECTED]> wrote:
> > > > > > > I've run into a situation with @Script where I need to be
able
> > to
> > > > limit
> > > > > > > script output in dynamic responses.  The only problem with
> > @Script
> > > > > > templates
> > > > > > > (for this scenerio) is that the render logic doesn't really
> > happen
> > > > in
> > > > > > the
> > > > > > > same way that component renders work.
> > > > > > >
> > > > > > > Right now if I pass a valid writer to one component any
IRender
> > body
> > > > > > > instances it contains will automatically have their content
> > output
> > > > as
> > > > > > well.
> > > > > > > (as is the preferred case for my usage)
> > > > > > >
> > > > > > > There is no IWriter to look at (as far as having context to
a
> > parent
> > > > > > > component) by the time we're at the point of actually
writing
> > some
> > > > of
> > > > > > the
> > > > > > > javascript output.
> > > > > > >
> > > > > > > The best solution I've come up with is adding two methods to
> > > > IComponent.
> > > > > > > setParent(IComponent)/getParent(). This allows me to walk up
the
> > > > current
> > > > > > > heirarchy and determine if the component (Script component
in
> > this
> > > > > > instance)
> > > > > > > is contained by a component that ~has~ been requested to
have
> > its
> > > > > > content
> > > > > > > dynamically updated.
> > > > > > >
> > > > > > > I can't find any scenerio in the current codebase where this
> > would
> > > > be an
> > > > > > > issue, but then again I don't know all the various ways
people
> > do
> > > > things
> > > > > > > with Tapestry so don't understand the potential problems
this
> > might
> > > > > > create.
> > > > > > >
> > > > > > > I might commit the change now (unless someone replies back
> > > > soon-ish),
> > > > > > but
> > > > > > > will of course revert the change if requested.
> > > > > > >
> > > > > > > --
> > > > > > > Jesse Kuhnert
> > > > > > > Tacos/Tapestry, team member/developer
> > > > > > >
> > > > > > > Open source based consulting work centered around
> > > > > > > dojo/tapestry/tacos/hivemind.
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Howard M. Lewis Ship
> > > > > > TWD Consulting, Inc.
> > > > > > Independent J2EE / Open-Source Java Consultant
> > > > > > Creator and PMC Chair, Apache Tapestry
> > > > > > Creator, Apache HiveMind
> > > > > >
> > > > > > Professional Tapestry training, mentoring, support
> > > > > > and project work.  http://howardlewisship.com
> > > > > >
> > > > > >
> > ---------------------------------------------------------------------
> > > > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Jesse Kuhnert
> > > > > Tacos/Tapestry, team member/developer
> > > > >
> > > > > Open source based consulting work centered around
> > > > > dojo/tapestry/tacos/hivemind.
> > > > >
> > > > >
> > > >
> > > >
> > > > --
> > > > Howard M. Lewis Ship
> > > > TWD Consulting, Inc.
> > > > Independent J2EE / Open-Source Java Consultant
> > > > Creator and PMC Chair, Apache Tapestry
> > > > Creator, Apache HiveMind
> > > >
> > > > Professional Tapestry training, mentoring, support
> > > > and project work.  http://howardlewisship.com
> > > >
> > > >
---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > >
> > > >
> > >
> > >
> > > --
> > > Jesse Kuhnert
> > > Tacos/Tapestry, team member/developer
> > >
> > > Open source based consulting work centered around
> > > dojo/tapestry/tacos/hivemind.
> > >
> > >
> >
> >
> > --
> > Howard M. Lewis Ship
> > TWD Consulting, Inc.
> > Independent J2EE / Open-Source Java Consultant
> > Creator and PMC Chair, Apache Tapestry
> > Creator, Apache HiveMind
> >
> > Professional Tapestry training, mentoring, support
> > and project work.  http://howardlewisship.com
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
>
> --
> Jesse Kuhnert
> Tacos/Tapestry, team member/developer
>
> Open source based consulting work centered around
> dojo/tapestry/tacos/hivemind.
>
>


--
Howard M. Lewis Ship
TWD Consulting, Inc.
Independent J2EE / Open-Source Java Consultant
Creator and PMC Chair, Apache Tapestry
Creator, Apache HiveMind

Professional Tapestry training, mentoring, support
and project work.  http://howardlewisship.com

---------------------------------------------------------------------
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]

Reply via email to