Hi,
I am new at tapestry and I am learning from the "Tapestry in Action" book.
Wanting to play with Tapestry I am trying to make a SpinEdit component. I have
a
couple of questions which I hope some of you have answers to...
The SpinEdit control will be a component that will consist of a textfield and 2
buttons to
increase and decrease the value in it.
I started making a template SpinEdit.html
*************************************************
<input type="text" jwcid="spinedit"/><button
onclick="spinedit.value = parseInt(spinedit.value) + 1; return
false;">+</button><button
onclick="spinedit.value = parseInt(spinedit.value) - 1; return
false;">-</button>
*************************************************
Of course it's not how I want it to look like in the end, but I am interested
in Tapestry
functionality for now.
Then I started making the component specification SpinEdit.jwc
*************************************************
<component-specification
class="examples.SpinEdit"
allow-body="no"
allow-informal-parameters="no">
<parameter name="value" direction="form" required="no"
type="java.lang.String"/>
<parameter name="min_value" direction="in" required="no" type="int"/>
<parameter name="max_value" direction="in" required="no" type="int"/>
<parameter name="step_size" direction="in" required="no" type="int"/>
<component id="spinedit" type="TextField">
<inherited-binding name="value" parameter-name="value"/>
</component>
</component-specification>
*************************************************
As you can see I wanted to use an existing TextField component for showing and
saving the value.
Then I want to use the component like this
<input type="text" jwcid="inputAge"/>
page spec:
<component id="inputAge" type="SpinEdit">
<binding name="value" expression="address.age"/>
</component>
My first question is what class should I extend to make the SpinEdit class?
AbstractFormComponent? Or BaseComponent and implement IFormComponent?
I added a few lines such as
<parameter name="disabled" type="boolean" direction="in"/>
and
<property-specification name="name" type="java.lang.String"/>
<property-specification name="form" type="org.apache.tapestry.IForm"/>
to the specification to make things working a little bit.
I got a lot of problems with an AbstractMethodError for isDisabled().
When I added
public abstract boolean isDisabled();
public abstract void setDisabled(boolean value);
to the SpinEdit class, these problems finally went away, but why do I need to
add
these? Because I didn't need them for the other parameters too.
When I extend BaseComponent and implement IFormComponent I got the problem
that setAge() was called 2 times. The first was the correct value and the
second it was
reset to null, causing the next page not to the display the correct age.
When I extend AbstractFormComponent I had to implement a lot of things that I
really
did not see the need for. Seemed a lot of work while the internal TextField
component
already really did all the work I needed. Which reminds me.... how can I render
my
component template in the renderComponent method?
I hope someone can push me in the right direction. Maybe there is a existing
SpinEdit
component that I can learn from? Any help is appreciated.
Kind regards,
Robert.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]