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