Hi,
I am trying to standardise the way our developers code a page class that
uses a Grid component. Part of this process is defining an interface that
contains the get/set methods for the property used in the row parameter of
the Grid component.
Since the data used in any Grid in our project will always extend from a
specific super-type, I have created a bounded generic interface to give type
safety to the get/set methods in the page class.
The problem is, Tapestry 5.1.0.5 doesn't seem to honour this.
I'll try to illustrate..
Our code looks something like this;
class MyPageClass implements MyInterface<MyGridRowType> {
...
...
@Override
public MyGridRowType getRow() {...}
@Override
public void setRow(MyGridRowType row) {...}
...
}
interface MyInterface<T extends GridRowSupertype> {
T getRow():
void setRow(T row):
}
interface GridRowSupertype {
String getStringA();
}
class MyGridRowType implements GridRowSupertype {
@Override
public String getStringA() {...}
public String getStringB() {...}
}
Now, in the Grid component in our template file, if I try to use
'${row.stringb}' Tapestry throws an exception saying;
"...Class GridRowSupertype does not contain a property named 'stringb'...
...Available properties: stringa..."
Even though this is technically correct, Tapestry is referencing the
super-type and not the sub-type supplied by the page class. The return type
on the getRow() method in the page class is MyGridRowType, which does
contain the required method (getStringB).
I have confirmed this by simply removing the interface 'MyInterface' from
the page class and everything works fine.
Any suggestions?
Thanks,
Dan
--
View this message in context:
http://tapestry.1045711.n5.nabble.com/Generics-problem-with-Grid-row-parameter-tp2835598p2835598.html
Sent from the Tapestry - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]