Sorry, rush post...
The cf is the ContactField object, not the Contact object... confusing isn't it? :-)

But the question remains, where does the Contact property get it's value from?



On 4/17/06, Pedro Viegas <[EMAIL PROTECTED]> wrote:
I'm a newby in Tap but here's my 5 cents...

You're not setting the Contact property anywhere.
It has not an inicial value and you're setting it with itself... as in...
cf.setContact (getContact());

How do you call this page?
Do you set this property when caling this page?
Either way, the before mentioned line doesn't make much sence...

Regards,




On 4/17/06, Hans L <[EMAIL PROTECTED]> 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



--
Pedro Viegas



--
Pedro Viegas

Reply via email to