I have a problem with using forms in components where the data model
is passed to the components via parameter inside a T5 loop component.
When a form is submitted the data model seems to be lost.

What I'm trying to do is to iterate through a collection of users and
construct a form for each user where a user name can be edited. Each
form resides in a component that handles submission. The user model
data is passed to the component inside a page where a loop loops
through a collection of users. The idea is to have a form for each
user so when submitting a form, only the user edited will get updated.
However, when a form is submitted the user data model is lost and ends
up as a null pointer.

I wouldn't be surprised if I've missed something obvious or if the way
I try to achieve a form for each user isn't a valid usage of T5. Any
thoughts or suggestions? I've attached a simple example demonstrating
my approach in this email.

/Olof

// User.java Data Model
package org.example;

public class User
{
    private String name;

    public User(String name)
    {
        this.name = name;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }
}

//Users.java T5 Page
package org.example.testapp.pages;

import java.util.ArrayList;
import java.util.List;

import org.apache.tapestry.annotations.Persist;
import org.example.User;

public class Users
{
    private User user;

    @Persist("flash")
    private List<User> users;

    public void onActivate()
    {
        if (users == null)
        {
            users = new ArrayList<User>();
            users.add(new User("Ted"));
            users.add(new User("Olof"));
        }
    }

    public User getUser()
    {
        return user;
    }

    public void setUser(User user)
    {
        this.user = user;
    }

    public List<User> getUsers()
    {
        return users;
    }
}

// Users.html T5 Template
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd";>
<head>
</head>
<body>
        <t:loop source="users" value="user">
                <t:edituser user="user"/>
        </t:loop>
</body>
</html>

//EditUser.java T5 Component
package org.example.testapp.components;

import org.apache.tapestry.annotations.Parameter;
import org.example.User;

public class EditUser
{
    @Parameter(required = true)
    private User user;

    public void setUser(User user)
    {
        this.user = user;
    }

    public User getUser()
    {
        return user;
    }

    public void onSuccess()
    {
        // save user
    }
}

//EditUser.html T5 Template
<t:form xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd";>
        <t:textfield value="user.name"/><br/>
        <t:submit t:id="save" value="save"/>
</t:form>

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

Reply via email to