You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by Sam Coward <sa...@atnet.net.au> on 2004/03/08 04:09:04 UTC
[cforms] SelectionList environment?
Hi all!
I've been having a lot of fun lately playing with woody and flowscript,
I must say, flowscript is a mindblowing paradigm shift in web
applications development, I love your work, people! I've been having
some trouble trying to do something experimental, and was wondering if
someone could offer me their insight or maybe a hint where I might be
doing something wrong/bad...
I recently started looking at how to produce selection lists
dynamically, and came across the code from
FlowJXPathSelectionListBuilder. What I've been wanting to do is specify
a new kind of selection list that calls a pipeline, optionally with
parameters that may require evaluation of expressions against the form,
e.g.:
...
<wd:selection-list type="pipeline" select="/countries" match="country"
caption="@countryname" value="@id">
<wd:selection-list-param name="some-parameter" value="static-value"/>
<wd:selection-list-param name="continent" ref="/continent"/>
</wd:selection-list>
...
In this example, I wanted to resolve the value somehow from the form in
the case of the parameter "continent". Ideally I do not want to have to
pass this additionally in the business data since the form is already
there. (I understand the form def is using widget ID's and it's not the
same as the JXPath into object the form is bound to, but I will look
soon into how I might generate the widgetID, given the path from the
binding definition).
So, I implement SelectionList with a new class and I put it in the
cocoon.xconf etc for the selection-list hint. What I'm having trouble
with is getting at anything useful from this components' context. I
couldn't determine if there was a better way to obtain a reference to
the form, I followed some code that was in
FlowJXPathSelectionListBuilder/FlowJXPathSelectionList but it appears to
not work:
FlowJXPathSelectionListBuilder (implements
SelectionListBuilder,Contextualizable) passes the context object it
receives to a FlowJXPathSelectionList which it instantiates. When the
list was not created by any other means but the builder, it seems in
FlowJXPathSelectionList.generateSaxFragment() that this call will
retrieve something useful:
Object flowData =
FlowHelper.getContextObject(ContextHelper.getObjectModel(this.context));
This value is however, null. I also tried stuffing the value in a
request attr before calling sendPage() from flow, but the attribute is
not present in the request that I obtain from the context object using.
(I used ContextHelper.getObjectModel() and ObjectModelHelper to do that)
I noticed in the woody samples, that something similar is done with the
country selector demo, but a lot of selection list handling seems to be
implemented in javascript in the form definition, and I'd like to avoid
that if at all possible. What seems bizarre is that the XSP result page
for this demo uses a similar mechanism to one I tried in the
SelectionListBuilder/SelectionList, and it did not work.
So, um, I hate not being a very concise person, ... but, is what I'm
trying to do wrong? or is the context not behaving as it should? or
should I be implementing something else to obtain the form reference
more easily?
Many thanks for any advice you may be able to offer,
Sam