I'm trying to create a simple form that will work for both Add and Edit.  I'm 
trying to use onPrepare to setup the database object and the code works fine 
for an existing object.  When I try to use the form with a new object (id = 
null) it appears that onPrepare isn't called, so I end up with null pointer 
exceptions trying to build the form.

Here is my simple controller:

package com.starpoint.helpdesk.pages.office;

import com.starpoint.helpdesk.business.OfficeLogic;
import com.starpoint.helpdesk.domain.Office;
import com.sun.istack.internal.Nullable;
import org.apache.tapestry5.annotations.Log;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.slf4j.Logger;


/**
 */
public class EditOffice {

    @Inject
    private Logger logger;

    @Inject
    private OfficeLogic officeLogic;

    @Persist
    private Integer officeId;

    @Property
    private Office office;

    public Integer getOfficeId() {
        return officeId;
    }

    @Log
    public void setOfficeId(@Nullable Integer officeId) {
        this.officeId = officeId;
    }

    @Log
    void onPrepare(Integer officeId) {
        if (office == null) {
            office = officeId == null ? new Office() : 
officeLogic.getOffice(officeId);
        }
    }
    void onActivate(Integer officeId) {
        this.officeId = officeId;
    }

    Integer onPassivate() {
        return officeId;
    }

    public Object onSuccess() {
        logger.info("**************: " + office.toString());
        return this;
    }
}


And my form:

<html t:type="layout" title="helpdesk Index"
      t:sidebarTitle="Current Time"
      xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd";
      xmlns:p="tapestry:parameter">

<t:form t:id="editOfficeForm" t:context="officeId">
    <t:errors/>
    <table>
        <tr>
            <td><t:label for="officeName">Office Name</t:label></td>
            <td><t:textfield t:id="officeName" 
value="prop:office.officeName"></t:textfield></td>
        </tr>

        <tr>
            <td colspan="2">
                <t:submit t:id="saveOffice" class="button">Save 
Office</t:submit>
            </td>
        </tr>
    </table>

</t:form>

</html>

What am I missing?
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to