The clean solution was the modeling of just the page object and page activation
context... and tapestry does the rest.
so that sums up a custom edit page
public class CoachEdit
{
@Inject
private ContextValueEncoder contextValueEncoder;
@Inject
private Messages messages;
@Inject
private PersistenceService persistenceService;
@Inject
private PageRenderLinkSource pageRenderLinkSource;
@Property(write = false)
private Class beanType = Coach.class;
@Property
@PageActivationContext
private Coach bean;
@Property
private BeanModel beanModel;
@Inject
private BeanModelSource beanModelSource;
void onActivate(Coach bean)
{
this.bean = bean;
beanModel = beanModelSource.createEditModel(beanType, messages);
}
Coach onPassivate()
{
return bean;
}
@CleanupRender
void cleanup()
{
bean = null;
beanType = null;
}
@Log
@CommitAfter
@OnEvent(EventConstants.SUCCESS)
Link success()
{
persistenceService.save(bean);
return back();
}
@OnEvent("cancel")
Link back()
{
return pageRenderLinkSource.createPageRenderLinkWithContext(Show.class,
beanType, bean);
}
public String getListAllLinkMessage()
{
return TynamoMessages.listAll(messages, beanType);
}
public String getTitle()
{
return TynamoMessages.edit(messages, beanType);
}
}