Component extension is one of my big preoccupation of my day work. That's
really a big question and there is no obvious answer.
I'm trying to explore ways with Tapestry 5 jQuery and I may blog on it in
the next weeks.
For example, I'm using workers to achieve what Benny Law said: adding mixins
to
Le 11/05/2010 21:34, Thiago H. de Paula Figueiredo a écrit :
1.) Extend MySelect from Select
I found no way to assign my model to the selects privat model. There
is a setModel in Select but it seems to be there only for unit tests.
Tapestry components weren't meant to be subclassed.
By the
I agree.
I'm upgrading a big project from tapestry 3 to 5.
As I looked into the documentation and sources of tapestry 5 I thought:
wow, this is really great. it could not be any better!
But if components are no meant to be subclassed this seems like a
drawback for me. You have to copy and
I also wish component subclassing was at least an option. What I don't like
about copying and pasting from a Tapestry component is that I end up relying
on some internal packages and classes. That makes me feel dirty.
Benny
On Thu, May 13, 2010 at 7:47 AM, Andreas Bohnert a...@weberhofer.at
Why should you have the same rendering code in two different components?
When I have common code for several components I create an abstract base
component and put it into the base package. The template is not mandatory for
components or abstract base components/pages btw. You can use
On Thu, 13 May 2010 09:58:15 -0300, Christian Riedel
cr.ml...@googlemail.com wrote:
Why should you have the same rendering code in two different components?
When I have common code for several components I create an abstract base
component and put it into the base package. The template is not
On Thu, 13 May 2010 06:35:44 -0300, Nicolas Bouillon nico...@bouil.org
wrote:
By the way, why that ?
Compatibility. The more open to subclassing a component is, the harder it
is to keep it backward-compatible.
It's one thing I felt difficult, for example to change the way the
By the way, why that ?
Compatibility. The more open to subclassing a component is, the harder
it is to keep it backward-compatible.
Well, that's a good point. It's always about keeping the balance ...
Exactly. I was saying that components provided by Tapestry aren't
meant to
be
We are talking about subclassing a Tapestry component here. To give you an
example, I wanted to subclass the Select component to override how
BlankOption.AUTO is interpreted. I wanted the logic to not just look at the
required property but also to consider how many options are available and
Does this help at all?
http://jumpstart.doublenegative.com.au/jumpstart/examples/select/varied/$N/$N/$N/$N
Cheers,
Geoff
On 14/05/2010, at 12:11 AM, Benny Law wrote:
We are talking about subclassing a Tapestry component here. To give you an
example, I wanted to subclass the Select
Thanks Geoff, but no, it doesn't. Your example shows how the Select
component works as is. What I need is a smarter interpretation of
BlankOption.AUTO. Basically, if you look at the showBlankOption() method in
the Select class, you see this:
switch (blankOption)
{
case
Well I agree that some more extensibility could be made here and there. That
particular problem looks like it's worth a JIRA with a patch from you that
makes the component extensible to fix that problem :)
On the other hand there is an easy fix. Just look at the demo Geoff posted. Why
do you
I did look at the demo Geoff posted. How is that going to provide what I
need? I'm sorry, but I fail to see this easy fix you mentioned. Maybe you
can be a bit more specific?
On Thu, May 13, 2010 at 1:15 PM, Christian Riedel
cr.ml...@googlemail.comwrote:
Well I agree that some more
Why are you wanting to change the auto behavior in the first place?
In the few cases where there is no sensible default value, is using the
blankLabel and blankOption parameters so excruciatingly onerous? If so, why
not not simply wrap the select component in a custom select component that
On Thu, 13 May 2010 15:30:11 -0300, Robert Zeigler robe...@scazdl.org
wrote:
In fact, this particular case could be handled (I think?) in 5.2 in a
very clean way.
I was thinking in a mixin too, but in 5.1 and using DOM rewriting. A
little more complicated, but still viable.
Or just
As I explained before, I want to change the auto behavior to make it
smarter. Currently, there is really no intelligence in the logic: a blank
option is added if the field is not required, and no blank option is added
if the field is required. When the option list is static, I can set the
blank
...add some really heavy logic to your page/component:
tml:
t:form
t:select model=options value=o blankOption=prop:blank /
t:submit /
/t:form
page:
@Property
private String[] options;
@Persist
@Property
If the field is required, I still want a blank option
unless there is exactly one option because I don't want the first option to
be selected as a default. I want the user to consciously choose a value.
...wait. what? if it is required is probably not valid to choose the blank
option,
On Thu, 13 May 2010 15:44:50 -0300, Benny Law benny.mk@gmail.com
wrote:
I want the user to consciously choose a value.
select t:type=Select validate=required blankOption=always ... does
the trick, no?
--
Thiago H. de Paula Figueiredo
Independent Java, Apache Tapestry 5 and Hibernate
On Thu, May 13, 2010 at 3:29 PM, Thiago H. de Paula Figueiredo
thiag...@gmail.com wrote:
On Thu, 13 May 2010 15:44:50 -0300, Benny Law benny.mk@gmail.com
wrote:
I want the user to consciously choose a value.
select t:type=Select validate=required blankOption=always ... does
the
this looks very promising!!
that is what I was asking for and would solve at least my problem :)
So with mixins you do/can not override a method, you build a execution
chain instead?
Andreas
Robert Zeigler wrote:
Why are you wanting to change the auto behavior in the first place?
In the few
On Thu, 13 May 2010 17:09:45 -0300, Andreas Bohnert a...@weberhofer.at
wrote:
this looks very promising!!
that is what I was asking for and would solve at least my problem :)
So with mixins you do/can not override a method, you build a execution
chain instead?
In a simplified view,
I think it is fair to say that T5 has indeed gone to great lengths to try to
isolate the user from changes in the framework. Thus, if T5 decides to
change the internal implementation of how a Select works, there wouldn't be
100 people screaming See, we told you that Tapestry has never been and
Kotchnev akoch...@gmail.com
Para: Tapestry users users@tapestry.apache.org
Enviadas: Quinta-feira, 13 de Maio de 2010 17:20:41
Assunto: Re: Best way to extend a component?
I think it is fair to say that T5 has indeed gone to great lengths to try to
isolate the user from changes in the framework. Thus
De: Alex Kotchnevakoch...@gmail.com
Para: Tapestry usersusers@tapestry.apache.org
Enviadas: Quinta-feira, 13 de Maio de 2010 17:20:41
Assunto: Re: Best way to extend a component?
I think it is fair to say that T5 has indeed gone to great lengths to try to
isolate
this was the good roundup!
Andreas
Alex Kotchnev wrote:
I think it is fair to say that T5 has indeed gone to great lengths to try to
isolate the user from changes in the framework. Thus, if T5 decides to
change the internal implementation of how a Select works, there wouldn't be
100 people
Precisely. Thank you, Alex.
Mixins are excellent for some things, but not a replacement for subclassing
for every case. And you have to add a bit of extra code per usage in the
.tml (t:mixin=...).
On Thu, May 13, 2010 at 4:20 PM, Alex Kotchnev akoch...@gmail.com wrote:
I think it is fair to say
Thiago is right; it's more like a pipeline, although not exactly a pipeline,
either. :) It's still a state machine, stepping through the various render
phases, but in each render phase, you have a series of sub states, one for
each mixin, + the component's own method. In 5.2, you can
On Thu, 13 May 2010 17:56:22 -0300, Benny Law benny.mk@gmail.com
wrote:
Precisely. Thank you, Alex.
Mixins are excellent for some things, but not a replacement for
subclassing for every case.
I agree. There's a very hard balance between opening and keeping backward
compatibility.
Right. I'm simply pointing out a way to do that with mixins.
For instance, we can add:
@BindParamater;
private SelectModel model;
private BlankOption originalOption;
and make beginRender* look something like this
void beginRender() {
originalOption = blankOption;
if (blankOption == AUTO)
so, I just hope 5.2 is around the corner ...
Robert Zeigler wrote:
Thiago is right; it's more like a pipeline, although not exactly a pipeline, either. :)
It's still a state machine, stepping through the various render phases, but in each
render phase, you have a series of sub states, one for
- a bit off topic I know but...
I like beforeRender() and afterRender() for it's clear when they
occur and why. Whereas beginRender() and endRender() sound like
instructions - but onBeginRender() and onEndRender() on the other hand
are also very clear, if not more so... Hmm...
On 13 May 2010
Hi,
I want to write my own 'select' component with a build-in model and
additional parameters.
I tried different ways to achieve this, but none of them worked out for me.
Basically I tried:
---
1.) Extend MySelect from Select
I found no way to assign my model to the
On Tue, 11 May 2010 16:01:56 -0300, Andreas Bohnert a...@weberhofer.at
wrote:
Hi,
Hi!
1.) Extend MySelect from Select
I found no way to assign my model to the selects privat model. There is
a setModel in Select but it seems to be there only for unit tests.
Tapestry components weren't
Thank you for that clarification!
But what am I supposed to put in that template, if I bound all the
parameters already in the java class?
java:
@Component(parameters= { model=myModel, value=myValue })
private Select select;
and again(?) in the template:
t:select t:id=select
On Tue, 11 May 2010 17:47:46 -0300, Andreas Bohnert a...@weberhofer.at
wrote:
Thank you for that clarification!
But what am I supposed to put in that template, if I bound all the
parameters already in the java class?
Just the t:id.
t:select t:id=select/
--
Thiago H. de Paula Figueiredo
ah, ok.
thanks!
Thiago H. de Paula Figueiredo wrote:
On Tue, 11 May 2010 17:47:46 -0300, Andreas Bohnert
a...@weberhofer.at wrote:
Thank you for that clarification!
But what am I supposed to put in that template, if I bound all the
parameters already in the java class?
Just the t:id.
37 matches
Mail list logo