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

Reply via email to