Couple of things...
1) @Forbean is deprecated. You should be using @For (which combines the
@Foreach and @ListEdit components). This is important when using it in a
form.
2) Now, you're editing the ContactField in a form (which you omitted),
but you're not actually submitting that form anywhere! Try using
AjaxLinkSubmit or AjaxSubmit instead of AjaxDirectLink.
3) In this case it shouldn't be a problem, but IMO the "listener"
parameter for XXXSubmit is very dangerous. If you put it before the
form, the form's values are not being submitted. I suggest using the
"action" parameter unless you have a really good reason for not doing so.
--
Ing. Leonardo Quijano Vincenzi
DTQ Software
Web Application Design and Programming
http://www.dtqsoftware.com
Hans L wrote:
Hi,
Jesse Kuhnert wrote:
It's up to you, but when you use something like Ajax"Direct"Link it
will invoke your method directly, bypassing most of the standard
rendering model.
If you have a blogPost object bound to a property which is persisted
to your session then it should be available to you in your method.
Are you sure this blogPost object has been set on your property at
least once with a non null object?
Thanks for the response. I'll try to post more code here & hopefully
make more sense.
The actual problem I am working with is part of a contact management
component, so I'll use that example here (which isn't much more
complex than the blog example). In this scenario I have a base
Contact class and ContactField classes which can be added to the Contact.
To start with, I am coming to the ContactEdit page from a ContactList
page. ContactList uses a listener (doAddContact/doEditContact) method
and @InjectPage to forward over to the ContactEdit page. This works
fine, so I won't post that code. In the doAddContact() listener, I
create a new Contact object, save it to the database, and then set
that new Contact object in the ContactEdit page (by calling
setContact()). Again, this works as expected -- I have a new empty
(but has an ID) Contact object in my ContactEdit page.
Here is my complete ContactEdit class:
public abstract class ContactEdit extends MyBasePage {
public void doAddField(IRequestCycle cycle)
{
ContactField cf = new ContactField();
cf.setContact(getContact());
// THIS IS ALWAYS SHOWING NULL:
log.info("Current contact: " + getContact());
getPersistenceService().save(cf);
setEditing(cf.getId(), true);
}
public void doStoreField(IRequestCycle cycle)
{
getPersistenceService().save(getCurrField());
setEditing(getCurrField().getId(), false);
}
private void setEditing(Integer contactFieldId, boolean edit)
{
Set editIds = getFieldEditorIds();
if (edit) {
editIds.add(contactFieldId);
} else {
editIds.remove(contactFieldId);
}
}
@Persist
public abstract Contact getContact();
public abstract void setContact(Contact c);
@Persist
@InitialValue("ognl:new java.util.HashSet()")
public abstract Set getFieldEditorIds();
public abstract void setFieldEditorIds(Set edit);
public abstract ContactField getCurrField();
public abstract void setCurrField(ContactField cf);
}
Note the comment in doAddField(); this is the problem I'm having. The
getContact() method is returning NULL when I use AjaxDirectLink to
invoke doAddField() so I cannot associate the new ContactField objects
with the page's Contact object.
Here is my ContactEdit.html (note, my ContactEdit.page is empty), with
the input form removed (since I'm stuck at the stage before that when
the new ContactField object is being created in the java page class).
<form jwcid="@Form">
<table>
<tr>
<th>ID</th>
<td>
<span jwcid="@Insert" value="ognl:contact.id">0</span>
</td>
</tr>
<tr>
<th>Name</th>
<td>
<input jwcid="[EMAIL PROTECTED]" value="ognl:contact.name"/>
</td>
</tr>
<tr>
<th>Company</th>
<td>
<input jwcid="[EMAIL PROTECTED]" value="ognl:contact.company"/>
</td>
</tr>
<tr>
<td>Fields</td>
<td jwcid="@Any" id="fields">
<span jwcid="@Foreach" source="ognl:contact.fields"
value="currField" index="currFieldIndex">
<div jwcid="@Any" class="credential" id="ognl:'field_' +
currField.id" style="width:400px;">
<span jwcid="@If" condition="ognl:not
fieldEditorIds.contains(currFieldIndex)">
<span jwcid="@Insert"
value="currField.label">Label</span>: <span jwcid="@Insert"
value="currField.value">Field Value</span>
</span>
<!-- removed the input form for brevity -->
</span> <!-- foreach -->
<a jwcid="@tacos:AjaxDirectLink" listener="listener:doAddField"
updateComponents="ognl:{'fields'}">Add Field</a>
</td>
</tr>
</table>
So, the "contact" field (i.e. getContact()) is available to my .html
template (e.g. I see the ID value correctly incrementing), but when I
invoke the doAddField() method it seems to be back to NULL.
Thanks for any help. I'm sure the problem is an obvious one.
Thanks,
Hans
On 4/17/06, *Hans L* <[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>> wrote:
Hi,
I'm new to Tacos (and Tapestry) and I'm trying to make some forms
for
adding/editing inter-related objects. What I'm trying to do is
probably
very simple, but I'm missing something to get it all working.
Here's a simplified example: I have a BlogPost and BlogPostImage
classes
and I want to create a single form that will allow me to specify the
fields of the BlogPost and add any number of BlogPostImage
objects to
that BlogPost.
I was able to take the AjaxForm examples that use "notes" and get
something like that to work for adding/editing my BlogPostImage
objects,
but I can't seem to figure the "right" way to associate those
BlogPostImage objects with my BlogPost.
I have:
<property name="blogPost" persist="session"/>
in my .page file.
In my .html template file I have something like this for adding new
(empty) BlogPostImage object:
<a jwcid="@tacos:AjaxDirectLink" listener="listener:doAddImage"
updateComponents="ognl:{'images'}">Add Image</a>
The problem is that in the doAddImage() method, the getBlogPost()
always
returns null. So, I guess my question is: How do I make that
blogPost
available when I invoke the AjaxDirectLink? I thought that this
would
happen automatically since it was set to persist. Do I have to
pass it
as a parameter to the doAddImage() listener method? Hopefully
not ...
I hope my question makes some sense. Thanks in advance for any
tips.
Hans
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting
language
that extends applications into web and mobile media. Attend the live
webcast
and join the prime developer group breaking into this new coding
territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
<http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642>
_______________________________________________
Tacos-devel mailing list
[email protected]
<mailto:[email protected]>
https://lists.sourceforge.net/lists/listinfo/tacos-devel
<https://lists.sourceforge.net/lists/listinfo/tacos-devel>
--
Jesse Kuhnert
Tacos/Tapestry, team member/developer
Open source based consulting work centered around
dojo/tapestry/tacos/hivemind. http://opennotion.com
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting
language
that extends applications into web and mobile media. Attend the live
webcast
and join the prime developer group breaking into this new coding
territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Tacos-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tacos-devel
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Tacos-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tacos-devel