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); } }