You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by "Jochen Kemnade (JIRA)" <ji...@apache.org> on 2014/05/27 09:20:54 UTC

[jira] [Updated] (TAP5-1548) Property expressions fails when using a supertype that implements an interface with a matching method

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

Jochen Kemnade updated TAP5-1548:
---------------------------------

    Labels: bulk-close-candidate  (was: )

This issue has been last updated about 1.5 years ago, has no assignee, affects an old version of Tapestry that is not actively developed anymore, and is therefore prone to be bulk-closed in the near future.

If the issue still persists with the most recent development preview of Tapestry (5.4-beta-6, which is available from Maven Central), please update it as soon as possible. In the case of a feature request, please discuss it with the Tapestry developer community on the dev@tapestry.apache.org mailing list first.


> Property expressions fails when using a supertype that implements an interface with a matching method
> -----------------------------------------------------------------------------------------------------
>
>                 Key: TAP5-1548
>                 URL: https://issues.apache.org/jira/browse/TAP5-1548
>             Project: Tapestry 5
>          Issue Type: Bug
>          Components: tapestry-core
>    Affects Versions: 5.2
>            Reporter: Robert Zeigler
>              Labels: bulk-close-candidate
>         Attachments: generics.bug1demo.tgz
>
>
> Given:
> public interface Baz { 
>   String getBar();
> }
> public class AbstractFoo implements Baz {
>   private String bar;
>   public String getBar() { return bar; }
>   public void setBar(String bar) { this.bar =bar; }
> }
> public class Foo extends AbstractFoo {}
> public class AComponent {
>   @Parameter
>   @Property
>   private AbstractFoo foo;
> }
> .tml:
>   <t:form><t:textfield value="foo.bar"/></t:form>
> The update of the textfield will fail with "Failure writing parameter 'value' of component Index:layout.acomponent.textfield: Expression 'foo.bar' for class org.apache.tapestry5.generics1.components.AComponent is read-only".
> Note that if you:
>   a) Specify Foo directly, it works
>   b) Remove the "getFoo" from interface "Baz", it works
>   c) add "setFoo" to the interface "Baz", it works.
> I would expect Tapestry to find the property from the base class first.  In fact, it used to, in T5.1.0.4 at least, because I found this issue upgrading a project from 5.1.0.4 to 5.2.5 and a component that used to work broke.  In that case, the component was using generic types (public class AComponent<T extends AbstractFoo>), but the problem shows up with or without the generics.  
> I can accept that if I specify the type of the property as "Baz", I will get the above exception even if I pass in a "Foo" or "AbstractFoo".  But using the (read-only) property from the Baz interface when I explicitly declare the property type to be AbstractFoo is unacceptable and a regression from previous behavior.



--
This message was sent by Atlassian JIRA
(v6.2#6252)