I was able to fix the problem by commenting out field.isRequired() in the following method:
public void insideLabel(Field field, Element labelElement) { if (inError(field)) { addErrorClassToCurrentElement("error"); }/* if (field.isRequired()) { labelElement.raw(" *"); }*/ } Is there a way to use similar logic and prevent the exception from happening? Thanks, Matt mraible wrote: > > I tried using your hint by changing my template to the following: > > <t:layout title="message:personDetail.title" > heading="message:personDetail.heading" menu="literal:PersonMenu" > xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> > > <t:messagebanner t:id="message" type="type"/> > > <form t:id="personForm" clientValidation="true"> > <t:errors/> > > <div class="t-beaneditor"> > <t:beaneditor t:id="person" object="person" exclude="id"/> > > <div class="t-beaneditor-row" style="text-align: center"> > <input type="submit" id="save" > value="message:button.save"/> > <input t:type="submit" t:id="delete" id="delete" > value="message:button.delete"/> > <input t:type="submit" t:id="cancel" id="cancel" > value="message:button.cancel"/> > </div> > </div> > </form> > > <script type="text/javascript"> > Form.focusFirstElement($("personForm")); > </script> > > </t:layout> > > Unfortunately, I still get the same error when trying to view this page: > > [exec] ERROR [btpool0-3] PersonForm.run(78) | Render queue error in > AfterRender[PersonForm:person.loop]: Failure reading parameter 'validate' > of component core/PropertyEditBlocks:datefield: No object of type > org.apache.tapestry5.services.PropertyEditContext is available from the > Environment. Available types are org.apache.tapestry5.RenderSupport, > org.apache.tapestry5.ValidationDecorator, > org.apache.tapestry5.ValidationTracker, > org.apache.tapestry5.internal.services.ClientBehaviorSupport, > org.apache.tapestry5.services.FormSupport, > org.apache.tapestry5.services.Heartbeat. > [exec] org.apache.tapestry5.ioc.internal.util.TapestryException: > Failure reading parameter 'validate' of component > core/PropertyEditBlocks:datefield: No object of type > org.apache.tapestry5.services.PropertyEditContext is available from the > Environment. Available types are org.apache.tapestry5.RenderSupport, > org.apache.tapestry5.ValidationDecorator, > org.apache.tapestry5.ValidationTracker, > org.apache.tapestry5.internal.services.ClientBehaviorSupport, > org.apache.tapestry5.services.FormSupport, > org.apache.tapestry5.services.Heartbeat. [at > classpath:org/apache/tapestry5/corelib/components/BeanEditor.tml, line 3, > column 47] > [exec] at > org.apache.tapestry5.internal.structure.ComponentPageElementImpl.invoke(ComponentPageElementImpl.java:909) > [exec] at > org.apache.tapestry5.internal.structure.ComponentPageElementImpl.access$200(ComponentPageElementImpl.java:50) > [exec] at > org.apache.tapestry5.internal.structure.ComponentPageElementImpl$6.render(ComponentPageElementImpl.java:189) > [exec] at > org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:68) > [exec] at > org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRenderQueueImpl.java:108) > [exec] at > $PageRenderQueue_12104869ca2.render($PageRenderQueue_12104869ca2.java) > [exec] at > $PageRenderQueue_12104869c9b.render($PageRenderQueue_12104869c9b.java) > [exec] at > org.apache.tapestry5.services.TapestryModule$15.renderMarkup(TapestryModule.java:1128) > [exec] at > com.company.webapp.services.AppModule$1.renderMarkup(AppModule.java:138) > > Here is my PersonForm.java class: > > package com.company.webapp.pages; > > import org.apache.tapestry5.ioc.annotations.Inject; > import org.apache.tapestry5.annotations.Component; > import org.apache.tapestry5.annotations.InjectPage; > import org.apache.tapestry5.annotations.Property; > import org.apache.tapestry5.annotations.Persist; > import org.apache.tapestry5.annotations.Service; > import org.apache.tapestry5.corelib.components.EventLink; > import org.apache.tapestry5.corelib.components.Form; > import org.apache.tapestry5.PersistenceConstants; > > import org.appfuse.service.GenericManager; > import com.company.model.Person; > > import org.slf4j.Logger; > > import java.util.List; > > public class PersonForm extends BasePage { > @Inject > private Logger log; > > @Inject > @Service("personManager") > private GenericManager<Person, Long> personManager; > > @Persist @Property > private Person person; > > public Person getPerson() { > return person; > } > > /** > * Allows setting person object from another class (i.e. PersonList) > * > * @param person an initialized instance > */ > public void setPerson(Person person) { > this.person = person; > } > > @InjectPage > private PersonList personList; > > @Component(id = "personForm") > private Form form; > > private boolean cancel; > private boolean delete; > > void onValidateForm() { > if (!delete && !cancel) { > // manually validate required fields or annotate the Person > object > /*if (foo.getProperty() == null || > user.getProperty().trim().equals("")) { > form.recordError("Property is a required field."); > }*/ > } > } > > void onActivate(Long id) { > if (id != null) { > person = personManager.get(id); > } > } > > Object onSuccess() { > if (delete) return onDelete(); > if (cancel) return onCancel(); > > log.debug("Saving person..."); > > boolean isNew = (getPerson().getId() == null); > > personManager.save(person); > > String key = (isNew) ? "person.added" : "person.updated"; > > if (isNew) { > personList.addInfo(key, true); > return personList; > } else { > addInfo(key, true); > return this; > } > } > > void onSelectedFromDelete() { > log.debug("Deleting person..."); > delete = true; > } > > void onSelectedFromCancel() { > log.debug("Cancelling form..."); > cancel = true; > } > > Object onDelete() { > personManager.remove(person.getId()); > personList.addInfo("person.deleted", true); > return personList; > } > > Object onCancel() { > return personList; > } > } > > I've attached my project which you should be able to run with "mvn > jetty:run -Ph2". To reproduce, go to http://localhost:8080/personform and > login with admin/admin. > > Thanks, > > Matt > > > > > Thiago H. de Paula Figueiredo wrote: >> >> Em Sat, 02 May 2009 15:31:15 -0300, mraible <m...@raibledesigns.com> >> escreveu: >> >>> I have the a Person.java object that I'm trying to use the BeanEditForm >>> component with. It has no Tapestry annotations in it. Is it possible to >>> use the BeanEditForm component with it? >> >> Yes. By the way, I've never used any Tapestry annotation in my POJOs. >> >>> <t:layout title="message:personDetail.title" >>> heading="message:personDetail.heading" >>> menu="literal:PersonMenu" >>> >>> xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> >>> >>> <t:beaneditform object="person" id="personForm" exclude="id"> >>> <t:parameter name="buttons"> >> >> You're trying to override the edition block of a non-existent BeanModel >> property. Try adding add="buttons" to the BeanEditForm. >> >> Hint: instead of using BeanEditForm in this case, use a Form, an Errors >> and a BeanEditor. You'll have complete control on how to add the submit >> input (and any other thing you need). BeanEditForm = Form + Errors + >> BeanEditor + submit input. >> >> -- >> Thiago H. de Paula Figueiredo >> Independent Java consultant, developer, and instructor >> http://www.arsmachina.com.br/thiago >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >> For additional commands, e-mail: users-h...@tapestry.apache.org >> >> >> > > -- View this message in context: http://www.nabble.com/Problem-using-BeanEditForm-with-a-POJO-tp23349016p23352398.html Sent from the Tapestry - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org