hi,
interesting :) couple of things:
- the value binding should never be persistent.
- if you do supply the "state" parameter to the tree, you'll want to
make sure that the corresponding property in the page is
persistent="yes" and you have an initial-value.
for example, i'm using the following (in a component that's nested in
a page - but that shouldn't really matter):
...
<property-specification name="treeState" type="java.util.Set"
persistent="yes" initial-value="new java.util.HashSet()"/>
...
<component id="tree" type="tacos:Tree">
<binding name="state" expression="treeState"/>
<binding name="contentProvider" expression="contentProvider"/>
<binding name="keyProvider"
expression="@[EMAIL PROTECTED]"/>
<inherited-binding name="value" parameter-name="node"/>
<binding name="sorter" expression="sorter"/>
</component>
...
here the .java has a getContentProvider() that is dynamic... the
FileSystemTree example is also reasonably close to what you're trying
to do... if the problem persist, please send me the full
stacktrace/error page, so i can tell which property is causing this...
but basically, the Tree does *not* set persistent properties at all if
you supply a state parameter with a HashSet, so perhaps the issue is
somewhere else...
viktor
On Apr 12, 2005 12:37 PM, John Gordon <[EMAIL PROTECTED]> wrote:
> Hey, Viktor,
>
> I downloaded the head version of tacos from cvs and built it, but am still
> getting the commit() error. I've tried various configurations for the
> property-specifications, persistent="yes"; persistent="no", but with no
> success. The results of trying your ideas follow:
>
> 1) no state param supplied: failed if I made the value binding persistent
> (commit() error). If I made the value binding not persistent, the page would
> render, but then I'd get a null error when clicking on an expand icon.
>
> 2) I've pretty much been doing this option from the get go. As soon as I
> turn persistence on, I get the commit() error.
>
> 3) I'm not 100% sure what you mean by "supplied by page", but I did set
> persistence on, but got the commit() error again. setting the initial-value
> of the state map to anything other than HashSet causes a class cast
> exception.
>
> Here's my code:
>
> [the .page file: ]
>
> ...
> <property-specification name="projectTreeProvider"
> type="net.sf.tacos.model.ITreeContentProvider"/>
> <property-specification name="treeState"
> persistent="yes"
> type="java.util.HashSet"
> initial-value="new java.util.HashSet()"/>
> <property-specification name="currentTreeNode"
> type="com.jasf.domain.UserProject"
> persistent="yes"/>
> <component id="projectTree" type="tacos:Tree">
> <binding name="contentProvider" expression="projectTreeProvider"/>
> <binding name="state" expression="treeState"/>
> <binding name="value" expression="currentTreeNode"/>
> </component>
>
> [end .page file]
>
> [the java file]
>
> ...
> public abstract ITreeContentProvider getProjectTreeProvider();
> public abstract void setProjectTreeProvider(ITreeContentProvider provider);
> ....
> /* (non-Javadoc)
> * @see org.apache.tapestry.IPage#beginPageRender()
> */
> public void pageBeginRender(PageEvent event) {
>
> setProjectTreeProvider(new ProjectTreeContentProvider(getProjects()));
>
> }
>
> ...
> /**
> * Returns a user's projects.
> * @return
> */
> public List getProjects() {
>
> User user = ((Visit)getVisit()).getUser(getRequestCycle());
>
> List userProjects = getTimeService().getRootUserProjects(user);
>
> log.debug("Found " + userProjects.size() + " projects for user " +
> user.getUserId() );
>
> return userProjects;
> }
> ...
>
> [end java file]
>
> [the html page]
>
> <form jwcid="@Form" >
>
> <span jwcid="projectTree" >
> <span jwcid="@InsertText" value="ognl:currentTreeNode.project.projectName"
> />
> </span>
> <span jwcid="[EMAIL PROTECTED]" source="ognl:projects"
> value="ognl:project" >
> <span jwcid="@ProjectBlock" project="ognl:project" />
> </span>
>
> <input jwcid="@Submit" type="submit" listener="ognl:listeners.formSubmit"
> value="Submit" label="Submit"/> <input jwcid="@Submit" listener="ognl:
> listeners.goToTimeEntry" value="Cancel" label="Cancel" />
>
> </form>
>
> [end html page]
>
> Do you have a working example of what I'm trying to do? I'm attempting to
> use the tree to display what objects belong to a user. The List that feeds
> my ITreeContentProvider is always being set via a call to Hibernate within
> the beginPageRender() method.
>
> One last question: what properties of the tacos:Tree component must be
> persistent in order for the tree to work?
>
> thanks for your input,
>
> John
>
>
> On Apr 12, 2005 5:43 AM, Viktor Szathmary <[EMAIL PROTECTED]> wrote:
> >
> > hi,
> >
> > this is probably not an issue with the contentProvider, but the
> > initialization sequence of the tree "state" binding. there was a small
> > bug in the tree component regarding this: the component tried to
> > default a persistent binding a bit too late - this should be fixed in
> > CVS head - try building from there. alternatively, try these scenarios
> > (with the last release):
> >
> > 1) no state param supplied at all
> > 2) state supplied from page property (persistent=yes, but no
> > initial-value)
> > 3) state supplied from page (persistent=yes, initial-value="
> > java.util.HashMap").
> >
> > regards,
> > viktor
> >
> >
> > On Apr 12, 2005 3:21 AM, John Gordon <[EMAIL PROTECTED]> wrote:
> > > Hi All,
> > >
> > > I've been banging my head on this one: I keep running into the following
> > > error in the rendering of a page when trying to use the tacos:Tree
> > > component:
> > >
> > > Page recorder for page [my page name] is locked after a commit()
> > >
> > > I must be getting something confused between setting persistence on
> > abstract
> > > classes correctly or not fully understanding the rewind/record process
> > > entirely. The Tacos:Tree examples are not a whole bunch of help here as
> > they
> > > creat static final ITreeContenProvider fields in the page classes. I'm
> > > dynamically generated my ITreecontentProvider with a List of objects
> > that
> > > are returned from the hibernate API.
> > >
> > > All the code that creates my ITreeContentProvider is done in the
> > > beginPageRender() method.
> > >
> > > Does anyone have an example of using the tacos:Tree component with a
> > > non-static ITreeContentProvider?
> > >
> > > Thanks, I really appreciate it.
> > >
> > > John
> > >
> > >
> >
>
> --
> "The present letter is a very long one, simply because I had no leisure to
> make it shorter." -- Blaise Pascal
> ------------------------------------------------------------------
> [EMAIL PROTECTED]
> (m)415.515.3549
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]