Hi Tony,
>> <t:form t:id="editOfficeForm" t:context="officeId">
Given this line in your template, Tapestry will just append nothing to
the url, if officeId is null. This means the context is simply not
there. When processing the post request, the correct signature for an
eventhanlder wit no context would be one with no parameters i.e.
"onPrepare()". This method should be called, if officeId is null.
As having multple eventHandlers for basically the same event just
because of different amount of parameters may clutter the code, I
suggest implementing just a single one with
org.apache.tapestry5.EventContext as parameter.
Cheers, nillehammer
Am 13.06.2011 17:54, schrieb Tony Nelson:
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;
t:context="officeId"
/**
*/
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
--
http://www.winfonet.eu
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org