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