I have a trivial app which consists of a Form, a Submit and one
TextField wrapped by a For loop. The TextField is bound to a mutable
String wrapper class (Value.java).

Every other time I submit the form the TextField value is dropped. The
TextField updates it's binding, but in the listener method the
property's value is incorrect (and the response).

Some things I noticed:
* this behavior alternates every other submit
* this behavior does not happen if the @For is removed and the field
is bound to values[0].value
 * on the 1st submit the field sets the value of the same object
which is a property of the page (see hashcodes in debug output)
* on the 2nd submit the field sets the value of a different object
than the page property. I don't know where it's getting this object.

Is this a bug or am I doing something wrong? Also, is there a better
way to collect the values of fields generated by a for loop?

-= Mat


Home.html
----------------
<html>
<body>
<form jwcid="@Form">
<table>
        <tr>
                <td
                        jwcid="@For"
                        element="td"
                        source="ognl:values"
                        value="ognl:currentValue">
                        
                        <input
                                jwcid="@TextField"
                                value="ognl:currentValue.value"/>
                </td>
        </tr>
</table>
<p><input jwcid="@Submit" listener="listener:onSubmit"/></p>
</form>
</body>
</html>


Home.java
---------------
public abstract class Home extends BasePage implements PageBeginRenderListener
{
        public abstract Value getCurrentValue();
        public abstract Value[] getValues();
        public abstract void setValues(Value[] values);
        public void pageBeginRender(PageEvent event)
        {
                Value[] values = getValues();
                if (values == null)
                {
                        System.out.println("\nHome.pageBeginRender() {instansiating 
values}");
                        values = new Value[] { new Value("a") };
                        setValues(values);
                }
        }
        public void onSubmit(IRequestCycle cycle)
        {
                System.out.println("Home.onSubmit() {values[0].value=" +
getValues()[0].getValue() + ", values[0]=" + getValues()[0] + "}");
                System.out.flush();
        }
}


Value.java
---------------
public class Value implements Serializable
{
        private static final long serialVersionUID = 3631215785425922895L;
        private String m_value;
        public Value(String value)
        {
                System.out.println("Value.<init>(" + value + ")");
                m_value = value;
        }
        public String getValue()
        {
                return m_value;
        }
        public void setValue(String value)
        {
                System.out.println("Value.setValue(" + value + ") {value=" + 
m_value
+ ", this=" + this + "}");
                m_value = value;
        }
}


Debug output
-------------------
Home.pageBeginRender() {instansiating values}
Value.<init>(a)

Home.pageBeginRender() {instansiating values}
Value.<init>(a)
Value.setValue(b) {value=a, [EMAIL PROTECTED]
Home.onSubmit() {values[0].value=b, [EMAIL PROTECTED]

Home.pageBeginRender() {instansiating values}
Value.<init>(a)
Value.setValue(c) {value=b, [EMAIL PROTECTED]
Home.onSubmit() {values[0].value=a, [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to