[ http://issues.apache.org/jira/browse/TAPESTRY-755?page=all ]

Howard M. Lewis Ship updated TAPESTRY-755:
------------------------------------------

    Attachment: SandboxPage.java
                InjectInheritance.java
                InjectInheritance.page

Ok, so what we have here is an HTML template, a page specification, a base 
class, and a page class.  Seems to fit your descritpion as accurately as I can, 
and it works just fine.

Are you seeing exceptions, or anything in the log?

Also, try the following.  Modify log4j.properties and add

log4j.category.tapestry.enhance.ComponentConstructorFactory=debug

When you run the app, you should see quite a bit of activity as page and 
component classes are enhanced to form concrete subclasses.  In my example:

ComponentConstructorFactory [DEBUG] Creating class:

ClassFab[
public class $InjectInheritance_0 extends pages.InjectInheritance

private org.apache.tapestry.services.ComponentMessagesSource 
_$componentMessagesSource;

private org.apache.hivemind.Messages _$messages;

private org.apache.tapestry.spec.IComponentSpecification _$specification;

private org.apache.tapestry.web.WebRequest _$webRequest;

public 
$InjectInheritance_0(org.apache.tapestry.services.ComponentMessagesSource $1, 
org.apache.tapestry.spec.IComponentSpecification $2, 
org.apache.tapestry.web.WebRequest $3)
{
  _$componentMessagesSource = $1;
  _$specification = $2;
  _$webRequest = $3;
}


public org.apache.tapestry.spec.IComponentSpecification getSpecification()
return _$specification;

public org.apache.hivemind.Messages getMessages()
{
  if (_$messages == null)
    _$messages = _$componentMessagesSource.getMessages(this);
  return _$messages;
}


public org.apache.tapestry.web.WebRequest getWebRequest()
return _$webRequest;

]



> injection: Beware of where you declare the abstract method
> ----------------------------------------------------------
>
>          Key: TAPESTRY-755
>          URL: http://issues.apache.org/jira/browse/TAPESTRY-755
>      Project: Tapestry
>         Type: Bug
>   Components: Framework
>     Versions: 4.0
>  Environment: Tested on Tomcat 5.5.9 / JDK 1.5 / FC2
>     Reporter: Henrik Vendelbo
>     Priority: Minor
>  Attachments: InjectInheritance.html, InjectInheritance.java, 
> InjectInheritance.page, SandboxPage.java
>
> Take the following class hierachy: BasePage -> MarketPage -> FeaturePage
> If you inject into FeaturePage using an <inject> tag in the page file, but 
> the abstract method is declared in MarketPage, the enhanced version of 
> FeaturePage will _not_ have an implementation of the accessor method.
> If you try to declare the abstract method in FeaturePage as well, it will 
> _not_ have an implementation of the accessor method.
> If you instead do an @InjectObject in MarketPage(and remember to remove the 
> inject tag), the enhanced FeaturePage class will have an implementation of 
> the accessor method.
> I other words the current functionality requires that you inject into the 
> class that first declares the abstract method, and not a sub class.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


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

Reply via email to