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
> >
> >
>