[ 
https://issues.apache.org/jira/browse/TAPESTRY-1225?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Howard M. Lewis Ship closed TAPESTRY-1225.
------------------------------------------

    Resolution: Invalid

The correct solution is to set the component type in the template and use the 
(recently added) @InjectComponent annotation to gain a reference.  That way, 
the type is only defined in one place, but you can reference the  component 
according to an implement interface or base class, as suits your code.

> Conflict between implicit component type and type of field
> ----------------------------------------------------------
>
>                 Key: TAPESTRY-1225
>                 URL: https://issues.apache.org/jira/browse/TAPESTRY-1225
>             Project: Tapestry
>          Issue Type: Bug
>          Components: tapestry-core
>    Affects Versions: 5.0
>            Reporter: Howard M. Lewis Ship
>            Assignee: Howard M. Lewis Ship
>
> If you declare an injected component field with an interface type, as in:
> @Component
> private Field _password;
> This overrides the t:type in the template, but then causes an error:
>  Class org.apache.tapestry.Field was not transformed for use as a component; 
> either it does not have the @ComponentClass annotation, or was not in a 
> package subject to component transformation.
> Stack trace
>         * 
> org.apache.tapestry.internal.services.ComponentClassTransformerImpl.createInstantiator(ComponentClassTransformerImpl.java:135)
>         * 
> $ComponentClassTransformer_1100906f653.createInstantiator($ComponentClassTransformer_1100906f653.java)
>         * 
> $ComponentClassTransformer_1100906f624.createInstantiator($ComponentClassTransformer_1100906f624.java)
>         * 
> org.apache.tapestry.internal.services.ComponentInstantiatorSourceImpl.findInstantiator(ComponentInstantiatorSourceImpl.java:215)
>         * 
> $ComponentInstantiatorSource_1100906f626.findInstantiator($ComponentInstantiatorSource_1100906f626.java)
>         * 
> $ComponentInstantiatorSource_1100906f620.findInstantiator($ComponentInstantiatorSource_1100906f620.java)
>         * 
> org.apache.tapestry.internal.services.PageElementFactoryImpl.newComponentElement(PageElementFactoryImpl.java:146)
>         * 
> $PageElementFactory_1100906f651.newComponentElement($PageElementFactory_1100906f651.java)
>         * 
> $PageElementFactory_1100906f649.newComponentElement($PageElementFactory_1100906f649.java)
>         * 
> org.apache.tapestry.internal.services.PageLoaderImpl.loadTemplateForComponent(PageLoaderImpl.java:313)
>         * 
> org.apache.tapestry.internal.services.PageLoaderImpl.workComponentQueue(PageLoaderImpl.java:139)
>         * 
> org.apache.tapestry.internal.services.PageLoaderImpl.loadPage(PageLoaderImpl.java:102)
>         * $PageLoader_1100906f64b.loadPage($PageLoader_1100906f64b.java)
>         * $PageLoader_1100906f648.loadPage($PageLoader_1100906f648.java)
>         * 
> org.apache.tapestry.internal.services.PagePoolImpl.checkout(PagePoolImpl.java:63)
>         * $PagePool_1100906f650.checkout($PagePool_1100906f650.java)
>         * $PagePool_1100906f647.checkout($PagePool_1100906f647.java)
>         * 
> org.apache.tapestry.internal.services.RequestPageCacheImpl.getByClassName(RequestPageCacheImpl.java:60)
>         * 
> org.apache.tapestry.internal.services.RequestPageCacheImpl.get(RequestPageCacheImpl.java:51)
>         * 
> $RequestPageCache_1100906f645.get($RequestPageCache_1100906f645.java)
>         * 
> $RequestPageCache_1100906f646.get($RequestPageCache_1100906f646.java)
>         * 
> $RequestPageCache_1100906f61d.get($RequestPageCache_1100906f61d.java)
>         * 
> org.apache.tapestry.internal.services.PageLinkHandlerImpl.handle(PageLinkHandlerImpl.java:38)
>         * 
> $PageLinkHandler_1100906f644.handle($PageLinkHandler_1100906f644.java)
>         * 
> $PageLinkHandler_1100906f640.handle($PageLinkHandler_1100906f640.java)
>         * 
> org.apache.tapestry.internal.services.PageRenderDispatcher.dispatch(PageRenderDispatcher.java:87)
>         * $Dispatcher_1100906f642.dispatch($Dispatcher_1100906f642.java)
>         * $Dispatcher_1100906f643.dispatch($Dispatcher_1100906f643.java)
>         * $Dispatcher_1100906f637.dispatch($Dispatcher_1100906f637.java)
>         * 
> org.apache.tapestry.services.TapestryModule$5.service(TapestryModule.java:385)
>         * 
> org.apache.tapestry.services.TapestryModule$6.service(TapestryModule.java:418)
>         * 
> $RequestHandler_1100906f638.service($RequestHandler_1100906f638.java)
>         * 
> org.apache.tapestry.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:49)
>         * 
> $RequestHandler_1100906f638.service($RequestHandler_1100906f638.java)
>         * 
> org.apache.tapestry.internal.services.LocalizationFilter.service(LocalizationFilter.java:43)
>         * 
> $RequestHandler_1100906f638.service($RequestHandler_1100906f638.java)
>         * 
> org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:91)
>         * 
> org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:1)
>         * 
> org.apache.tapestry.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:77)
>         * 
> org.apache.tapestry.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:104)
>         * 
> $RequestHandler_1100906f638.service($RequestHandler_1100906f638.java)
>         * 
> $RequestHandler_1100906f639.service($RequestHandler_1100906f639.java)
>         * 
> $RequestHandler_1100906f630.service($RequestHandler_1100906f630.java)
>         * 
> org.apache.tapestry.services.TapestryModule$3.service(TapestryModule.java:308)
>         * 
> $HttpServletRequestHandler_1100906f631.service($HttpServletRequestHandler_1100906f631.java)
>         * 
> $HttpServletRequestHandler_1100906f62f.service($HttpServletRequestHandler_1100906f62f.java)
>         * org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:114)
> The solution is to explicitly provide the component type on the field, but it 
> would be nice if Tapestry could recognize that the type from the template is 
> assignable to the type from the field, and use the template type in this 
> circumstance.
>        

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to