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.IAsset is > 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 > > > > >