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

Reply via email to