Hello. I'm having trouble making a *select based on CustomTOs.*
I explain myself: I have three entities: - *User*(idUser, name, surname, phone,...) - *Proyect*(idProyect, name, city,....) - *Member*(idMember, idUser, idProyect, ...) I want to* make a select using user.name as label and member.idMember as value.* I took a look to: http://wiki.apache.org/tapestry/Tapestry5HowtoSelectWithObjects Now, I have the following: - *MemberCTO(idMember, name)*, with a public Constructor, and getters & setters for idMember, name -------------------------- On the page (.tml) I have: <div class="field"> <t:label for="memberCTO"/> <span class="entry"> <t:select t:id="memberCTO" model="membersCTO" encoder="membersCTO" value="memberCTO" t:validate="required"/> </span> </div> -------------------------- On the page (.java) I have ... @Persist @Property private memberCTO memberCTO; private GenericSelectModel<memberCTO> membersCTO; public GenericSelectModel<memberCTO> getmembersCTO(){ return membersCTO; } .... void setupRender() { membersCTO = new GenericSelectModel<memberCTO> (memberDao.findUsersInProyect( fase.getProyecto().getIdProyecto()), memberCTO.class, "name", "idMember", _access); } The source code of GenericSelectModel was obtained from: http://wiki.apache.org/tapestry/Tapestry5HowtoSelectWithObjects I try to load the page, and I get an error (you can see it at the end). I debugged the code, and I can say: - membersCTO contains an ArrayList<MemberCTO> with the data obtained form the DB. - GenericSelectModel, establish (at the Constructor): - idFieldAdapter...: PropertyAdarptedImpl..... name='idMember' - labelFieldAdapter: PropertyAdarptedImpl..... name='name' (I think its correct) - List<OptionModel> getOptions() {} (Inside GenericSelectModel class) for (T obj : list) { optionModelList.add(new OptionModelImpl(nvl(labelFieldAdapter.get(obj)), obj)); } Generate an exception. Particularlly: labelFieldAdapter.get(obj) doesnt work: obj: Object[2] (id=438) *[0]** *Long (id=445) value 6 *[1]* "admin" (id=446) count 5 hash 0 offset 0 value (id=447) Exception: java.lang.RuntimeException: Error reading property 'name' of [Ljava.lang.Object;@1890909: object is not an instance of declaring class ERROR: ----------------------------- An unexpected application exception has occurred. org.apache.tapestry5.internal.services.RenderQueueException Render queue error in BeforeRenderTemplate[project/Task:miembrocto]: Error reading property 'name' of [Ljava.lang.Object;@191e550: object is not an instance of declaring class .... .... <t:select t:id="memberCTO" model="membersCTO" encoder="membersCTO" value="memberCTO" t:validate="required"/> .... .... location classpath:serviguide/inludes/proyectos/web/pages/project/Task.tml, line 81 java.lang.IllegalArgumentException object is not an instance of declaring class Hide uninteresting stack frames Stack trace java.lang.reflect.Method.invoke(Method.java:597) org.apache.tapestry5.ioc.internal.services.PropertyAdapterImpl.get(PropertyAdapterImpl.java:96) serviguide.inludes.proyectos.web.util.GenericSelectModel.getOptions(GenericSelectModel.java:68) org.apache.tapestry5.util.AbstractSelectModel.visit(AbstractSelectModel.java:46) org.apache.tapestry5.corelib.components.Select.options(Select.java:236) org.apache.tapestry5.corelib.components.Select.beforeRenderTemplate(Select.java) org.apache.tapestry5.internal.structure.ComponentPageElementImpl$BeforeRenderTemplatePhase.invokeComponent(ComponentPageElementImpl.java:253) org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.run(ComponentPageElementImpl.java:164) org.apache.tapestry5.internal.structure.ComponentPageElementImpl.invoke(ComponentPageElementImpl.java:941) org.apache.tapestry5.internal.structure.ComponentPageElementImpl.access$400(ComponentPageElementImpl.java:49) org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.callback(ComponentPageElementImpl.java:159) org.apache.tapestry5.internal.structure.ComponentPageElementImpl$BeforeRenderTemplatePhase.render(ComponentPageElementImpl.java:258) org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:74) org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRenderQueueImpl.java:121) org.apache.tapestry5.internal.services.MarkupRendererTerminator.renderMarkup(MarkupRendererTerminator.java:37) org.apache.tapestry5.services.TapestryModule$27.renderMarkup(TapestryModule.java:1748) org.apache.tapestry5.services.TapestryModule$26.renderMarkup(TapestryModule.java:1732) org.apache.tapestry5.services.TapestryModule$25.renderMarkup(TapestryModule.java:1714) org.apache.tapestry5.services.TapestryModule$24.renderMarkup(TapestryModule.java:1700) org.apache.tapestry5.services.TapestryModule$23.renderMarkup(TapestryModule.java:1681) org.apache.tapestry5.services.TapestryModule$22.renderMarkup(TapestryModule.java:1662) org.apache.tapestry5.internal.services.PageMarkupRendererImpl.renderPageMarkup(PageMarkupRendererImpl.java:64) org.apache.tapestry5.internal.services.PageResponseRendererImpl.renderPageResponse(PageResponseRendererImpl.java:61) org.apache.tapestry5.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:63) org.apache.tapestry5.services.TapestryModule$33.handle(TapestryModule.java:1943) serviguide.inludes.proyectos.web.services.PageRenderAuthenticationFilter.handle(PageRenderAuthenticationFilter.java:41) org.apache.tapestry5.internal.services.ComponentRequestHandlerTerminator.handlePageRender(ComponentRequestHandlerTerminator.java:48) org.apache.tapestry5.internal.services.PageRenderDispatcher.dispatch(PageRenderDispatcher.java:45) org.apache.tapestry5.services.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:245) org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26) org.apache.tapestry5.services.TapestryModule$4.service(TapestryModule.java:778) org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:767) org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:85) org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:90) org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:81) org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85) org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:103) org.apache.tapestry5.services.TapestryModule$HttpServletRequestHandlerTerminator.service(TapestryModule.java:197) org.apache.tapestry5.upload.internal.services.MultipartServletRequestFilter.service(MultipartServletRequestFilter.java:44) org.apache.tapestry5.internal.gzip.GZipFilter.service(GZipFilter.java:53) org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62) org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:726) org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:127) -- Santiago Wenceslao Fernández Lorenzo www.santiquetzal.es