You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by John Gordon <jo...@gmail.com> on 2005/04/12 09:21:43 UTC
Example of tacos:Tree with Hibernate?
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
Re: Example of tacos:Tree with Hibernate?
Posted by John Gordon <jo...@gmail.com>.
Mystery solved. You must implement the IKeyProvider. Once I did that, things
began to work. Here's the change to the .page file:
...
<binding name="keyProvider" expression="@
com.jasf.web.components.ProjectKeyProvider@INSTANCE"/>
...
John
On Apr 12, 2005 11:12 AM, John Gordon <jo...@gmail.com> wrote:
>
> Okay, I've made some modifications to my config and to the code and am no
> longer getting any tapestry exceptions. The only problem I have now is that
> nothing happens when I click the expansion icon of the root element in the
> tree. The page posts but nothing expands.
>
> I've put logging into my custom ITreeContentProvider implementation and it
> is returning true for the hasChildren() method.
>
> At least I'm not getting explosions any longer. Here's' my updated
> code/config:
>
> [ .page file]
>
> ...
> <property-specification name="currentTreeNode"
> type="com.jasf.domain.UserProject"/>
> <component id="projectTree" type="tacos:Tree">
> <binding name="contentProvider" expression="projectTreeProvider"/>
> <binding name="value" expression="currentTreeNode"/>
> </component>
> ...
>
> [ end .page file]
>
> [ begin java file]
>
> ( I removed everything in beginPageRender() and created a simple getter)
> ...
> public ITreeContentProvider getProjectTreeProvider(){
> if(provider == null){
> provider = new ProjectTreeContentProvider(getProjects());
> }
> return provider;
> }
> ...
>
> [end java file]
>
> [begin html file]
>
> <form jwcid="@Form" >
>
> <span jwcid="projectTree" >
> <span jwcid="@InsertText" value="ognl:currentTreeNode.project.projectName"
> />
> </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 file]
>
> Thanks for giving me all the help you are. I appreciate it very much.
>
>
> John
>
> On Apr 12, 2005 9:55 AM, Viktor Szathmary <ph...@gmail.com> wrote:
> >
> > 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="@
> > com.freshdirect.cms.ui.tapestry.tree.ContentKeyProvider@INSTANCE"/>
> > <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 <jo...@gmail.com> 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="projectLoop@Foreach" 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 <ph...@gmail.com> 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 <jo...@gmail.com> 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
> > > ------------------------------------------------------------------
> > > john.gordon@gmail.com
> > > (m)415.515.3549
> > >
> > >
> >
>
>
>
> --
> "The present letter is a very long one, simply because I had no leisure to
> make it shorter." -- Blaise Pascal
> ------------------------------------------------------------------
> john.gordon@gmail.com
>
--
"The present letter is a very long one, simply because I had no leisure to
make it shorter." -- Blaise Pascal
------------------------------------------------------------------
john.gordon@gmail.com
Re: Example of tacos:Tree with Hibernate?
Posted by Viktor Szathmary <ph...@gmail.com>.
does your page implementation clear the contentProvider instance in
detach() (ie. is it recreated on every request)? if that's the case,
i'm a bit puzzled as to what the issue is.. here's current behavior
(as it's in CVS HEAD):
- if no binding for the "state" paremeter is supplied, the Tree
component instantiates a new HashSet that is stored and restored as a
persistent component property. Tapestry is going to re-estabilish this
on the next request.
- if a binding is supplied, and it's value is null, it is initialized
and updated.
- if a binding with a value is supplied, the component uses that.
so, to avoid confusion, when you switch between these two approaches
(wheter or not the the tree state is supplied), please make sure
you're using a fresh session (otherwise tapestry might restore
persistent properties when you don't expect it).
viktor
On Apr 12, 2005 2:12 PM, John Gordon <jo...@gmail.com> wrote:
> Okay, I've made some modifications to my config and to the code and am no
> longer getting any tapestry exceptions. The only problem I have now is that
> nothing happens when I click the expansion icon of the root element in the
> tree. The page posts but nothing expands.
>
> I've put logging into my custom ITreeContentProvider implementation and it
> is returning true for the hasChildren() method.
>
> At least I'm not getting explosions any longer. Here's' my updated
> code/config:
>
> [ .page file]
>
> ...
> <property-specification name="currentTreeNode"
> type="com.jasf.domain.UserProject"/>
> <component id="projectTree" type="tacos:Tree">
> <binding name="contentProvider"
> expression="projectTreeProvider"/>
> <binding name="value" expression="currentTreeNode"/>
> </component>
> ...
>
> [ end .page file]
>
> [ begin java file]
>
> ( I removed everything in beginPageRender() and created a simple getter)
> ...
> public ITreeContentProvider getProjectTreeProvider(){
> if(provider == null){
> provider = new
> ProjectTreeContentProvider(getProjects());
> }
> return provider;
> }
> ...
>
> [end java file]
>
> [begin html file]
>
> <form jwcid="@Form" >
>
> <span jwcid="projectTree" >
> <span jwcid="@InsertText"
> value="ognl:currentTreeNode.project.projectName" />
> </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 file]
>
> Thanks for giving me all the help you are. I appreciate it very much.
>
>
> John
>
>
> On Apr 12, 2005 9:55 AM, Viktor Szathmary <ph...@gmail.com> wrote:
> > 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="@com.freshdirect.cms.ui.tapestry.tree.ContentKeyProvider@INSTANCE"/>
> > <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 <jo...@gmail.com> 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="projectLoop@Foreach" 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 <ph...@gmail.com> 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 <jo...@gmail.com> 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
> > >
> ------------------------------------------------------------------
> > > john.gordon@gmail.com
> > > (m)415.515.3549
> > >
> > >
> >
>
>
>
> --
>
> "The present letter is a very long one, simply because I had no leisure to
> make it shorter." -- Blaise Pascal
> ------------------------------------------------------------------
> john.gordon@gmail.com
---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-user-help@jakarta.apache.org
Re: Example of tacos:Tree with Hibernate?
Posted by John Gordon <jo...@gmail.com>.
Okay, I've made some modifications to my config and to the code and am no
longer getting any tapestry exceptions. The only problem I have now is that
nothing happens when I click the expansion icon of the root element in the
tree. The page posts but nothing expands.
I've put logging into my custom ITreeContentProvider implementation and it
is returning true for the hasChildren() method.
At least I'm not getting explosions any longer. Here's' my updated
code/config:
[ .page file]
...
<property-specification name="currentTreeNode"
type="com.jasf.domain.UserProject"/>
<component id="projectTree" type="tacos:Tree">
<binding name="contentProvider" expression="projectTreeProvider"/>
<binding name="value" expression="currentTreeNode"/>
</component>
...
[ end .page file]
[ begin java file]
( I removed everything in beginPageRender() and created a simple getter)
...
public ITreeContentProvider getProjectTreeProvider(){
if(provider == null){
provider = new ProjectTreeContentProvider(getProjects());
}
return provider;
}
...
[end java file]
[begin html file]
<form jwcid="@Form" >
<span jwcid="projectTree" >
<span jwcid="@InsertText" value="ognl:currentTreeNode.project.projectName"
/>
</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 file]
Thanks for giving me all the help you are. I appreciate it very much.
John
On Apr 12, 2005 9:55 AM, Viktor Szathmary <ph...@gmail.com> wrote:
>
> 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="@
> com.freshdirect.cms.ui.tapestry.tree.ContentKeyProvider@INSTANCE"/>
> <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 <jo...@gmail.com> 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="projectLoop@Foreach" 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 <ph...@gmail.com> 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 <jo...@gmail.com> 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
> > ------------------------------------------------------------------
> > john.gordon@gmail.com
> > (m)415.515.3549
> >
> >
>
--
"The present letter is a very long one, simply because I had no leisure to
make it shorter." -- Blaise Pascal
------------------------------------------------------------------
john.gordon@gmail.com
Re: Example of tacos:Tree with Hibernate?
Posted by Viktor Szathmary <ph...@gmail.com>.
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="@com.freshdirect.cms.ui.tapestry.tree.ContentKeyProvider@INSTANCE"/>
<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 <jo...@gmail.com> 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="projectLoop@Foreach" 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 <ph...@gmail.com> 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 <jo...@gmail.com> 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
> ------------------------------------------------------------------
> john.gordon@gmail.com
> (m)415.515.3549
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-user-help@jakarta.apache.org
Re: Example of tacos:Tree with Hibernate?
Posted by John Gordon <jo...@gmail.com>.
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="projectLoop@Foreach" 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 <ph...@gmail.com> 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 <jo...@gmail.com> 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
------------------------------------------------------------------
john.gordon@gmail.com
(m)415.515.3549
Re: Example of tacos:Tree with Hibernate?
Posted by Viktor Szathmary <ph...@gmail.com>.
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 <jo...@gmail.com> 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
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-user-help@jakarta.apache.org