Using a List instead of Object was a good call, that did the trick. Why did I use Object? I was following Howard's getStylesheets() code
On 1/16/06, Jason Suplizio <[EMAIL PROTECTED]> wrote: > > Derick...thanks alot for your help. I'm going to try this out and let you > know how things go. > Jason > > On 1/13/06, Derick Fernando < [EMAIL PROTECTED]> wrote: > > > > Hello, > > > > Just occurred to me, try making: > > > > <binding name="javascript" value="ognl:externalScripts"/> > > an inherited-binding like: > > <inherited-binding name="javascript" parameter-name="externalScripts"/> > > > > I dont see inherited-binding in the docs at: > > http://jakarta.apache.org/tapestry/UsersGuide/spec.html should it be > > there? > > > > Thanks > > > > Derick Fernando wrote: > > > Hello Again, > > > > > > My first response was based on your first email. According to your > > stack > > > trace in the second email, you are having a different problem with > > > AbstractBinding. Perhaps someone else can help figure it out. > > > > > > Thanks > > > > > > Derick Fernando wrote: > > > > > >> Hello, > > >> > > >> Whats happening here is that tapestry needs to know how to convert > > >> whatever is returned by getJavaScripts() into an iterator. So take a > > >> look at: > > >> > > >> > > http://jakarta.apache.org/tapestry/tapestry/hivedocs/module/tapestry.coerce.html > > >> > > >> > > >> You could do something like: public abstract List getJavaScripts() > > >> instead. Is there are a reason your return type is of object? > > >> > > >> Its easy to build a list of assets with ognl:{ assets.fileOne, > > >> assets.fileTwo}. > > >> > > >> If that does not meet your requirements you will have to make your > > own > > >> contribution to tapestry.coerce.IteratorConverters. > > >> > > >> Hope that helps. > > >> > > >> Jason Suplizio wrote: > > >> > > >>> My last note: my application is passing an asset to my Border, which > > >>> invokes > > >>> my CustomShell > > >>> <component id="myAssets" type="MyAssets"/> > > >>> <component id="border" type="_comps:Border"> > > >>> <binding name="externalScripts" value="ognl: > > >>> components.myAssets.assets.javascriptFilename "/> > > >>> </component> > > >>> > > >>> In the Border.jwc > > >>> <parameter name="externalScripts" required="no"/> > > >>> <component id="shell" type="CustomShell"> > > >>> <binding name="javascript" value="ognl:externalScripts"/> > > >>> </component> > > >>> > > >>> On 1/13/06, Jason Suplizio < [EMAIL PROTECTED]> wrote: > > >>> > > >>>> Here's the stack: > > >>>> Using: org.jfree.chart.encoders.SunPNGEncoderAdapter > > >>>> org.apache.tapestry.BindingException: Error converting value for > > >>>> parameter > > >>>> javascript: No type converter for type org.apache.tapestry.IAssetis > > >>>> available. [context:/WEB-INF/tapcomps/Border.jwc, line 29, column > > 55] > > >>>> at org.apache.tapestry.binding.AbstractBinding.getObject( > > >>>> AbstractBinding.java:97) > > >>>> at $CustomShell_80.getJavascript($CustomShell_80.java) > > >>>> at > > >>>> com.expd.lib.tapestry_v40.components.CustomShell.renderComponent ( > > >>>> CustomShell.java:111) > > >>>> at $CustomShell_80.renderComponent($CustomShell_80.java) > > >>>> at > > >>>> org.apache.tapestry.AbstractComponent.render(AbstractComponent.java > > >>>> :617) > > >>>> at org.apache.tapestry.BaseComponent.renderComponent ( > > >>>> BaseComponent.java:92) > > >>>> at > > >>>> org.apache.tapestry.AbstractComponent.render(AbstractComponent.java > > >>>> :617) > > >>>> at org.apache.tapestry.BaseComponent.renderComponent( > > >>>> BaseComponent.java :92) > > >>>> at org.apache.tapestry.AbstractComponent.render ( > > >>>> AbstractComponent.java:617) > > >>>> at > > >>>> org.apache.tapestry.AbstractPage.renderPage(AbstractPage.java :275) > > >>>> at org.apache.tapestry.engine.RequestCycle.renderPage( > > >>>> RequestCycle.java:366) > > >>>> at > > >>>> > > org.apache.tapestry.services.impl.ResponseRendererImpl.renderResponse ( > > >>>> ResponseRendererImpl.java:71) > > >>>> at > > >>>> > > $ResponseRenderer_108c54f6985.renderResponse($ResponseRenderer_108c54f6985.java) > > >>>> > > >>>> at > > >>>> org.apache.tapestry.engine.PageService.service(PageService.java:68) > > >>>> at > > >>>> > > $IEngineService_108c54f69f8.service($IEngineService_108c54f69f8.java) > > >>>> at > > >>>> org.apache.tapestry.services.impl.EngineServiceOuterProxy.service( > > >>>> EngineServiceOuterProxy.java:66) > > >>>> at org.apache.tapestry.engine.AbstractEngine.service( > > >>>> AbstractEngine.java:248) > > >>>> at > > >>>> org.apache.tapestry.services.impl.InvokeEngineTerminator.service ( > > >>>> InvokeEngineTerminator.java:60) > > >>>> at > > >>>> > > $WebRequestServicer_108c54f69cf.service($WebRequestServicer_108c54f69cf.java) > > >>>> > > >>>> at > > org.apache.tapestry.services.impl.DisableCachingFilter.service( > > >>>> DisableCachingFilter.java:48) > > >>>> at > > >>>> > > $WebRequestServicerFilter_108c54f69d1.service($WebRequestServicerFilter_108c54f69d1.java) > > >>>> > > >>>> at > > >>>> > > $WebRequestServicer_108c54f69d3.service($WebRequestServicer_108c54f69d3.java) > > > > >>>> > > >>>> at > > >>>> > > $WebRequestServicer_108c54f69cb.service($WebRequestServicer_108c54f69cb.java) > > >>>> > > >>>> > > >>>> at > > >>>> > > org.apache.tapestry.services.impl.WebRequestServicerPipelineBridge.service > > >>>> > > >>>> (WebRequestServicerPipelineBridge.java:56) > > >>>> at > > >>>> > > $ServletRequestServicer_108c54f69af.service($ServletRequestServicer_108c54f69af.java) > > > > >>>> > > >>>> > > >>>> at org.apache.tapestry.request.DecodedRequestInjector.service( > > >>>> DecodedRequestInjector.java:55) > > >>>> at > > >>>> > > $ServletRequestServicerFilter_108c54f69ab.service($ServletRequestServicerFilter_108c54f69ab.java) > > > > >>>> > > >>>> at > > >>>> > > $ServletRequestServicer_108c54f69b1.service($ServletRequestServicer_108c54f69b1.java) > > >>>> > > >>>> > > >>>> at org.apache.tapestry.multipart.MultipartDecoderFilter.service( > > >>>> MultipartDecoderFilter.java:52) > > >>>> at > > >>>> > > $ServletRequestServicerFilter_108c54f69a9.service($ServletRequestServicerFilter_108c54f69a9.java) > > >>>> > > >>>> at > > >>>> > > $ServletRequestServicer_108c54f69b1.service($ServletRequestServicer_108c54f69b1.java) > > >>>> > > >>>> > > >>>> at > > org.apache.tapestry.services.impl.SetupRequestEncoding.service ( > > >>>> SetupRequestEncoding.java:53) > > >>>> at > > >>>> > > $ServletRequestServicerFilter_108c54f69ad.service($ServletRequestServicerFilter_108c54f69ad.java) > > >>>> > > >>>> at > > >>>> > > $ServletRequestServicer_108c54f69b1.service($ServletRequestServicer_108c54f69b1.java) > > >>>> > > >>>> > > >>>> at > > >>>> > > $ServletRequestServicer_108c54f69a3.service($ServletRequestServicer_108c54f69a3.java) > > > > >>>> > > >>>> at org.apache.tapestry.ApplicationServlet.doService( > > >>>> ApplicationServlet.java:123) > > >>>> at com.expd.app.expo2.webaccess.ExpoTapestryServlet.doService ( > > >>>> ExpoTapestryServlet.java:52) > > >>>> at org.apache.tapestry.ApplicationServlet.doGet( > > >>>> ApplicationServlet.java:79) > > >>>> at javax.servlet.http.HttpServlet.service (HttpServlet.java:740) > > >>>> at javax.servlet.http.HttpServlet.service (HttpServlet.java:853) > > >>>> at > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( > > >>>> ApplicationFilterChain.java:247) > > >>>> at org.apache.catalina.core.ApplicationFilterChain.doFilter( > > >>>> ApplicationFilterChain.java :193) > > >>>> at org.apache.catalina.core.StandardWrapperValve.invoke ( > > >>>> StandardWrapperValve.java:256) > > >>>> at > > >>>> > > org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext > > >>>> > > >>>> ( StandardPipeline.java:643) > > >>>> at org.apache.catalina.core.StandardPipeline.invoke( > > >>>> StandardPipeline.java:480) > > >>>> at org.apache.catalina.core.ContainerBase.invoke ( > > ContainerBase.java > > >>>> :995) > > >>>> at org.apache.catalina.core.StandardContextValve.invoke ( > > >>>> StandardContextValve.java:191) > > >>>> at > > >>>> > > org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext > > >>>> > > >>>> (StandardPipeline.java:643) > > >>>> at org.apache.catalina.core.StandardPipeline.invoke ( > > >>>> StandardPipeline.java :480) > > >>>> at org.apache.catalina.core.ContainerBase.invoke( > > ContainerBase.java > > >>>> :995) > > >>>> at org.apache.catalina.core.StandardContext.invoke ( > > >>>> StandardContext.java:2422) > > >>>> at org.apache.catalina.core.StandardHostValve.invoke ( > > >>>> StandardHostValve.java:180) > > >>>> at > > >>>> > > org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext > > >>>> > > >>>> (StandardPipeline.java:643) > > >>>> at org.apache.catalina.valves.ErrorDispatcherValve.invoke ( > > >>>> ErrorDispatcherValve.java :171) > > >>>> at > > >>>> > > org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext > > >>>> > > >>>> ( StandardPipeline.java:641) > > >>>> at org.apache.catalina.valves.ErrorReportValve.invoke( > > >>>> ErrorReportValve.java:163) > > >>>> at > > >>>> > > org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext > > >>>> > > >>>> (StandardPipeline.java:641) > > >>>> at org.apache.catalina.core.StandardPipeline.invoke( > > >>>> StandardPipeline.java:480) > > >>>> at org.apache.catalina.core.ContainerBase.invoke ( > > ContainerBase.java > > >>>> :995) > > >>>> at org.apache.catalina.core.StandardEngineValve.invoke( > > >>>> StandardEngineValve.java:174) > > >>>> at > > >>>> > > org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext > > >>>> > > >>>> (StandardPipeline.java :643) > > >>>> at org.apache.catalina.core.StandardPipeline.invoke ( > > >>>> StandardPipeline.java:480) > > >>>> at org.apache.catalina.core.ContainerBase.invoke( > > ContainerBase.java > > >>>> :995) > > >>>> at org.apache.coyote.tomcat4.CoyoteAdapter.service > > >>>> (CoyoteAdapter.java > > >>>> :199) > > >>>> at org.apache.coyote.http11.Http11Processor.process( > > >>>> Http11Processor.java:828) > > >>>> at > > >>>> > > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection > > >>>> > > >>>> (Http11Protocol.java :700) > > >>>> at org.apache.tomcat.util.net.TcpWorkerThread.runIt ( > > >>>> PoolTcpEndpoint.java:584) > > >>>> at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run > > ( > > >>>> ThreadPool.java:683) > > >>>> at java.lang.Thread.run (Unknown Source) > > >>>> Caused by: org.apache.hivemind.ApplicationRuntimeException: No type > > >>>> converter for type org.apache.tapestry.IAsset is available. > > >>>> at org.apache.tapestry.coerce.ValueConverterImpl.coerceValue ( > > >>>> ValueConverterImpl.java :105) > > >>>> at > > >>>> > > $ValueConverter_108c54f6957.coerceValue($ValueConverter_108c54f6957.java) > > >>>> > > >>>> at org.apache.tapestry.binding.AbstractBinding.getObject ( > > >>>> AbstractBinding.java:91) > > >>>> ... 68 more > > >>>> > > >>>> On 1/13/06, Jason Suplizio <[EMAIL PROTECTED]> wrote: > > >>>> > > >>>>> Hi! > > >>>>> I've created a customized version of the Shell > > >>>>> component...essentially I > > >>>>> want to to extend the handling of stylesheet assets to javascripts > > > > >>>>> (write > > >>>>> <script> tags embedded in the <head > element). > > >>>>> CustomShell.java adds to the original: > > >>>>> > > >>>>> public abstract IAsset getJavascript(); > > >>>>> public abstract Object getJavascripts(); > > >>>>> > > >>>>> public void renderComponent(IMarkupWriter writer, IRequestCycle > > >>>>> cycle) { > > >>>>> /** added the following **/ > > >>>>> IAsset javascript = getJavascript(); > > >>>>> > > >>>>> if (javascript != null) > > >>>>> writeJavascriptScript(writer, cycle, javascript); > > >>>>> > > >>>>> Iterator scripts = (Iterator) > > >>>>> getValueConverter().coerceValue( > > >>>>> getJavascripts(), > > >>>>> Iterator.class); > > >>>>> > > >>>>> while (scripts.hasNext()) > > >>>>> { > > >>>>> javascript = (IAsset) i.next(); > > >>>>> > > >>>>> writeJavascriptScript(writer, cycle, javascript); > > >>>>> } > > >>>>> } > > >>>>> private void writeJavascriptScript(IMarkupWriter writer, > > >>>>> IRequestCycle cycle, IAsset javascript) > > >>>>> { > > >>>>> writer.beginEmpty("script"); > > >>>>> writer.attribute("type", "text/javascript"); > > >>>>> writer.attribute("src", javascript.buildURL()); > > >>>>> writer.closeTag(); > > >>>>> writer.println(); > > >>>>> } > > >>>>> > > >>>>> CustomShell.jwc adds these to the original: > > >>>>> <parameter name="javascript"> > > >>>>> <description> > > >>>>> If specified, provides an external javascript for the page. > > >>>>> </description> > > >>>>> </parameter> > > >>>>> > > >>>>> <parameter name="javascripts"> > > >>>>> <description> > > >>>>> Array or collection of stylesheet assets. > > >>>>> </description> > > >>>>> </parameter> > > >>>>> > > >>>>> > > >>>>> However, this isn't working as I'm running into a ValueConverter > > >>>>> issue: > > >>>>> > > >>>>> Exception: "org.apache.hivemind.ApplicationRuntimeException: No > > type > > >>>>> converter for type org.apache.tapestry.IAsset is available. > > >>>>> > > >>>>> Borrowing from the Shell.jwc file, I notice that the following > > service > > >>>>> is injected - which apparently implements > > >>>>> org.apache.tapestry.coerce.ValueConverterImpl > > >>>>> > > >>>>> <inject property="valueConverter" object="service: > > >>>>> tapestry.coerce.ValueConverter"/> > > >>>>> > > >>>>> What do I need to do to get my custom shell comp to render the > > script > > >>>>> assets? Thanks in advance! > > >>>>> Jason > > >>>>> > > >>>>> > > >>>> > > >>> > > >> > > >> > > > > > > > > > > > > -- > > ......................................... > > > > Derick Fernando > > Lead Architect > > [EMAIL PROTECTED] > > (323) 314-9593 > > http://www.thelabllc.com > > > > Content is for intended recipient only. > > Copyright 2001-2005, The Lab, LLC > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > >