With 5.0.x, I was able to solve this by adding an @Service("beanName")
annotation. Will this not work in 5.1?


Otho wrote:
> 
> Nice :)
> 
> But I would suggest you start using Tapestry 5.1. The new spring
> integration
> is very convenient and enables you for example to inject tapestry services
> into spring beans. The only thing which you should look for is that if you
> have two beans which can be assigned to the same type, you cannot inject
> them the simple way but need to inject ApplicationContext to be able to
> get
> the bean by name.
> 
> What I mean by this: I have two beans like this:
> 
> <bean id="dao" parent="baseTransactionProxy">
>         <property name="target">
>             <ref local="daoImpl"/>
>         </property>
> </bean>
> 
> <bean id="daoImpl" class="my.company.dao.DaoImpl" />
> 
> Since both are assignable to Dao interface I can't just @Inject Dao dao;
> but
> have to use
> 
> @Inject
> ApplicationContext appContext;
> 
> private Dao dao;
> 
> ...
> 
> Object onSomeActionFromSomeComponent()
> {
>    dao = (Dao) appContext.getBean("dao");
>    List<SomeType> = dao.findAll(SomeType.class);
>    ...
>    return null;
> }
> 
> Also you have some minor deprecations which should be updated to the new
> way. For example you don't use ComponentResources anymore to create
> pagelinks, but PageRenderLinkSource . Otherwise the transition is very
> smooth and the additional features in Tapestry 5.1 are well worth the
> small
> effort.
> 
> 2009/5/6 mraible <m...@raibledesigns.com>
> 
>>
>> That worked - thanks!
>>
>> Matt
>>
>>
>> Otho wrote:
>> >
>> > Hi,
>> >
>> > 1) Turn production mode to false in AppModule.java. You get much better
>> > exception reporting then.
>> >
>> > The exception you mentioned is caused by:
>> >
>> > org.apache.tapestry5.internal.services.TransformationExceptionUnable to
>> > add
>> > new method public final void setFrom(java.lang.String) as it already
>> > exists.
>> >
>> > If you set the @Property annotation you don't write primitive setters
>> > anymore. Commenting this out gives thes next problem:
>> >
>> > org.apache.tapestry5.internal.services.RenderQueueExceptionRender queue
>> > error in BeginRender[Login:outputraw]: Failure reading parameter
>> 'value'
>> > of
>> > component Login:outputraw: Embedded component(s) form are defined
>> within
>> > component class com.company.webapp.components.UserForm (or a
>> super-class
>> > of
>> > UserForm), but are not present in the component template
>> > (classpath:com/company/webapp/components/UserForm.tml).
>> >
>> > If you explicitly define a @Component in the class you need to use the
>> > implicit (variable name) id or assign a descriptive id.
>> >
>> > In UserForm.tml change <t:form> to <t:form t:id="form"> and it works.
>> >
>> > 2) Something in your setup, I suspect the aspectj compile stage,
>> > successfully defeats tapestry live class reloading via mvn compile.
>> This
>> > is
>> > a nuisance you should look into when you got the time.
>> >
>> > Regards,
>> > Otho
>> >
>> >
>> >
>> >
>> >
>> >
>> > 2009/5/4 mraible <m...@raibledesigns.com>
>> >
>> >>
>> >> Should be fixed now. Sorry about that.
>> >>
>> >> Matt
>> >>
>> >>
>> >> Robert Zeigler wrote:
>> >> >
>> >> > Tried dl'ing and running and received the following error:
>> >> > [ERROR] BUILD ERROR
>> >> > [INFO]
>> >> >
>> >>
>> ------------------------------------------------------------------------
>> >> > [INFO] Failed to resolve artifact.
>> >> >
>> >> > GroupId: org.appfuse.plugins
>> >> > ArtifactId: appfuse-maven-plugin
>> >> > Version: 2.1-SNAPSHOT
>> >> >
>> >> > Reason: Unable to download the artifact from any repository
>> >> >
>> >> >    org.appfuse.plugins:appfuse-maven-plugin:pom:2.1-SNAPSHOT
>> >> >
>> >> > from the specified remote repositories:
>> >> >    central (http://repo1.maven.org/maven2),
>> >> >    appfuse (http://oss.sonatype.org/content/groups/appfuse)
>> >> >
>> >> >
>> >> > Robert
>> >> >
>> >> > On May 2, 2009, at 5/211:25 PM , mraible wrote:
>> >> >
>> >> >>
>> >> >> I'm using Tapestry 5.0.14. You can download the project from
>> >> >> http://static.raibledesigns.com/downloads/basic-tapestry.zip.
>> >> >>
>> >> >> Matt
>> >> >>
>> >> >>
>> >> >> Robert Zeigler wrote:
>> >> >>>
>> >> >>> Hi Matt,
>> >> >>>
>> >> >>> Hm, that's an odd exception.
>> >> >>> The way BeanEditForm works is to lookup an "editor block" for each
>> >> >>> property, based on the "datatype" for that property (datatype is
>> >> >>> determined by the DataTypeAnalyzer service; lookup of the block is
>> >> >>> the
>> >> >>> job of the BeanBlockSource service).  The information needed for
>> each
>> >> >>> of the editor blocks to function is stashed in a
>> >> >>> "PropertyEditContext", which is made available to the blocks by
>> the
>> >> >>> BeanEditor component via the Enviromental service.  Which is why
>> I'm
>> >> >>> saying your exception looks weird: it's saying that the
>> >> >>> PropertyEditContext wasn't available from the environment.  Since
>> >> >>> this
>> >> >>> presumably happens while rendering the bean editor, it's weird,
>> >> >>> because property edit context /should/ be available!
>> >> >>>
>> >> >>> The mailing list strips attachments; can you post the project
>> >> >>> elsewhere?
>> >> >>> Also, what version of t5?
>> >> >>>
>> >> >>> Robert
>> >> >>>
>> >> >>> On May 2, 2009, at 5/210:46 PM , mraible wrote:
>> >> >>>
>> >> >>>>
>> >> >>>> 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
>> >> >>>
>> >> >>>
>> >> >>>
>> ---------------------------------------------------------------------
>> >> >>> 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-tp23349016p23352566.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
>> >> >
>> >> >
>> >> >
>> ---------------------------------------------------------------------
>> >> > 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-tp23349016p23371856.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
>> >>
>> >>
>> >
>> >
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Problem-using-BeanEditForm-with-a-POJO-tp23349016p23400496.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
>>
>>
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Problem-using-BeanEditForm-with-a-POJO-tp23349016p23410573.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