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]

Reply via email to