Interesting. I wonder, though, if you could do this another way, that
doesn't involve duplicating all of the parameters of grid.
What if you provided a coercion from an EJBQL query to GridDataSource?
If you want the query to be specifiable as a string in, eg, the
template, then you could also provide an ejbql binding prefix. The
result would look something like:
<t:grid source="ejbql:select p from Person p"/>
Now you're just specifying the query string, and ejbql returns the
query, and tapestry then coerces that (using your query =>
GridDataSource coercer) into your grid data source.
Depends, of course, on how much "extra" functionality you'll be
providing, so YMMV, but that's how I would approach what you described.
Robert
On Feb 13, 2009, at 2/131:43 PM , Yunhua Sang wrote:
I want to provide user a jpa entity grid component, which will provide
its own griddatasource and hide it to end user; user instead will
provide an ejbql for the entity grid and the component will execute
the ejbql, generate griddatasource, show results in grid. It's a good
example of simplifying/enhancing an existing component.
On Fri, Feb 13, 2009 at 1:57 PM, Robert Zeigler <robe...@scazdl.org>
wrote:
Depending on what you're trying to do, you may be able to
accomplish what
you want with a mixin, and avoid having to duplicate any parameters
at all.
On a project awhile back, for example, I wrote a "filter" mixin for
grid so
any grid could have filtering applied to it just by adding the
mixin. What
is it you're trying to do?
Robert
On Feb 13, 2009, at 2/1310:58 AM , Yunhua Sang wrote:
Hi guys,
Thanks for all your input. I've decided to change my code to use
composition instead of inheritance, though I still remain my
opinion:
it would be very nice too that inheritance is perfectly support in
Tapestry.
Now I am going to modify my code... one of my component is a sub-
class
of Grid, which has 20 parameters, I have to put near 20
inherit:xxx in
parameters of @Component annotation, hope I won't typo any of
them. ;)
Thanks and have a nice weekend.
Yunhua
On Fri, Feb 13, 2009 at 12:27 AM, Robert Zeigler
<robe...@scazdl.org>
wrote:
On Feb 12, 2009, at 2/126:55 PM , Howard Lewis Ship wrote:
On Thu, Feb 12, 2009 at 12:58 PM, Robert Zeigler <robe...@scazdl.org
>
wrote:
0) I don't usually extend components; I prefer building things
based on
composition. That said:
Which is the point of Tapestry!
Agreed! But our friend isn't using composition, he's using
inheritance,
which tapestry also, technically, supports.
2) This will work iff your parent class also implements a
"defaultName"
method that the subclass overrides. Just tried it to be sure.
That's an unintended behavior.
It may be, although I'm not sure why that should be. Consider:
public class Parent {
@Parameter("prop:defaultName")
private String name;
public String getDefaultName() {
return "parentdefaultname";
}
}
public class Child extends Parent {
@Override
public String getDefaultName() {
return "childdefaultname";
}
}
I would fully expect this to work; we specified the property to
use that
supplies the default value, and we override that in the child. I
would
be
annoyed if it didn't work. :)
Since the tapestry convention can be emulated as follows:
@Parameter("prop:defaultName()")
I don't see why the child overriding the parent's defaultName()
method
working is "unintended". It /should/ work. :)
3) You can provide getters and setters for the property.
Promise. :)
But
the
question at stake is /when/ you can access the bound value for
supplying
a
default, and in that, you may be correct.
Getter & setters will completey work. To the instrumented
component,
there's no difference between a getter/setter and any other
(private) method that accesses the field.
Robert
On Feb 12, 2009, at 2/122:18 PM , Yunhua Sang wrote:
Hi Robert,
2) I tried your way, it doesn't work; it doesn't work even
back to
5.0.18.
3) I don't think the get/set methods would work for
parameters; look
at ParameterWorker class, it's fairly complicated because of the
implementation of the binding magic.
Thanks,
Richard
On Thu, Feb 12, 2009 at 2:56 PM, Robert Zeigler <robe...@scazdl.org
>
wrote:
1) Since Child extends Parent, it already has a name
@Parameter.
2) If you want to provide the default in the child, you can
always
provide
the "default" method:
String defaultName() {
return "Tom";
}
3) Otherwise, access in the child via code is mediated
through normal
java
channels: create a public (or protected) getter and setter in
the
Parent
class.
Robert
On Feb 12, 2009, at 2/1212:45 PM , Yunhua Sang wrote:
Hi Howard,
Can you show me in a child component, how to access a
parameter
defined in parent by using another way? I cannot find api
which
isn't
internal about it. By the way, seems it's also diffcult to
provide
default binding for a parameter within parent because function
bindParameter(String parameterName, Binding binding) is
internal as
well.
Thanks,
Yunhua
On Thu, Feb 12, 2009 at 11:10 AM, Howard Lewis Ship
<hls...@gmail.com>
wrote:
It looks to me like theres an ambiguity here: I don't think
a child
component should be allowed to declare a second parameter,
"name"
in
this example, that is already defined in a super-class.
On Wed, Feb 11, 2009 at 12:20 PM, Yunhua Sang
<yunhua.s...@gmail.com>
wrote:
Hello Howard,
It turns out the error occurs only when the child wants to
provide
its
own default binding for a parameter originally defined in
parent;
example:
public class Parent {
@Parameter
private String name;
void setupRender() {
name.toUpperCase(); // NPE happens here
}
}
public class Child extends Parent{
@Parameter("prop:name")
private String name;
public String getName() {
return "Tom";
}
}
Page class:
public class ChildExample {
@Component
private Child child;
}
Template ChildExample.tml:
<html
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd
">
<h3>Test</h3>
<t:child t:id="child"/>
</html>
I am sorry for my previous inaccurate information and
thanks for
looking into it.
Yunhua
On Wed, Feb 11, 2009 at 2:15 PM, Howard Lewis Ship
<hls...@gmail.com>
wrote:
I'm not aware of anything that's changed in this area;
could you
elaborate?
On Wed, Feb 11, 2009 at 10:56 AM, Yunhua Sang
<yunhua.s...@gmail.com>
wrote:
Hello all,
It seems there is no clear document about how to access a
parameter
defined in parent component; previous to 5.0.18, I was
using the
way
of declaring the parameter again in child class and it
worked
well;
however looks like some changes in 5.1.0.0 broke the
way, seems
there
is no link between the parameter with same name in
parent and
child
now.
The problem is when I am USING a tapestry component,
it's such a
comfortable experience; but when I write a sub-class of a
component,
I
am getting frustrated: a lot of methods are package
visible;
there
is
no clear way for parameter manipulation, a typical
question: can
I
update an attibute of parameter in parent class? If
inheritance
is
not
a good practice in Tapestry, there should be a document
about
it.
Thanks in advance for any help,
Yunhua
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org
--
Howard M. Lewis Ship
Creator Apache Tapestry and Apache HiveMind
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-
unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org
--
Howard M. Lewis Ship
Creator Apache Tapestry and Apache HiveMind
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-
h...@tapestry.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org
--
Howard M. Lewis Ship
Creator Apache Tapestry and Apache HiveMind
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org