Hi,

There was a change from using pkencoder to valueencoder (it's noted in the upgrade notes) in 5.1 for loops contained in forms.
See: http://tapestry.apache.org/tapestry5.1/upgrade.html
Particularly, the section:

"Release 5.1.0.0
Primary Key Encoder

This is the change between releases that is most likely to affect your upgrade."


Robert


On Jun 12, 2009, at 6/1210:23 AM , m!ga wrote:


Hi everyone. We just started migration from tapestry 5.0 to 5.1 and found a
lot of strange exeptions. Here is one of them.

page class:

public class Test {
        
        @SuppressWarnings({"unused", "UnusedDeclaration"})
        @Component(id = "form")
        private Form form;

        @Property
        private SomeClass someClass;
        
        @Property
        private SomeClass[] someClasses = {new SomeClass("1"),new
SomeClass("2"),new SomeClass("3"),new SomeClass("4"),new SomeClass("5")};


        public class SomeClass
        {
                private String s = "SomeClass ";

                public SomeClass(String s)
                {
                        this.s += s;
                }
                public String toString()
                {
                        return s;
                }
        }
}


tml file:

<div xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd";>

        <form t:id="form">
                <t:loop source="someClasses" value="someClass">
                        <div>${someClass}</div>
                </t:loop>
                <input t:type="submit" value="Push me" />
        </form>
</div>

Works fine unless you try to submit form. It throws something like that:

Caused by: java.lang.IllegalArgumentException: Could not find a coercion from type java.lang.String to type ru.kupivip.pages.shop.Test $SomeClass.
Available coe
rcions: Double --> Float, Float --> Double...bla bla bla...

It can be solved by not-so-good-looking-code like this:

        private SomeClass someClass;

        public Object getSomeClass()
        {
                return someClass;
        }

        public void setSomeClass(Object maybeSomeClass)
        {
someClass = maybeSomeClass != null && maybeSomeClass instanceof SomeClass
? (SomeClass) maybeSomeClass : null;
        }

I've debugged the setter ant it seems that it is called 2 times:
1st time after onActivate phase
2nd time after onSubmit/onActivate

and 1st time the argument maybeSomeClass is not instance of SomeClass but
its toString() value!


--
View this message in context: 
http://www.nabble.com/Tapestry-5.1-exception--%22Could-not-find-a-coercion-from-type-...%22-on-form-submit-tp24001080p24001080.html
Sent from the Tapestry - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
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

Reply via email to