使用JSF时的等效Spring自定义Collection属性编辑器

时间:2009-12-17 22:06:55

标签: java spring jsf binding collections

我想知道如何在Java Server Faces中使用转换器,类似于Spring集合属性编辑器

假设以下模型

public class Group {

    private String name;

    List<User> users = new ArrayList<User>();

    // getter's and setter's
}

等效形式

<form ...>
    <h1>Group form</h1>
    <label for="name">Enter name</label>
    <input type="text" name="name"/>

    <label for="users">Select users</label>
    <!--value attribute stores userId-->
    <input type="checkbox" value="1" name="users"/> User 1
    <input type="checkbox" value="2" name="users"/> User 2
    <input type="checkbox" value="3" name="users"/> User 3
</form>

如果我使用Spring绑定Group类中的users属性,我会调用

binder.registerCustomEditor(List.class, new CustomCollectionEditor() {
    protected Object convertElement(Object userId)  {
        return new User((Integer) userId);
    }
});

使用Java Server Faces时如何获得相同的效果?

的问候,

1 个答案:

答案 0 :(得分:1)

为此,您可以实施javax.faces.convert.Converter。它的API非常自我解释:相应地编写getAsString()方法,它返回String的{​​{1}}表示形式,它可以位于每个技术ID下,例如Object 。然后,为了让JSF在应用请求参数阶段设置正确的userId,您需要实现Object它返回与给定getAsObject()值相关联的Object

基本上:

String

public class UserConverter implements Converter { private UserDAO userDAO = SomeDAOManager.getUserDAO(); public String getAsString(FacesContext context, UIComponent component, Object value) { return String.valueOf(((User) value).getId()); } public Object getAsObject(FacesContext context, UIComponent component, String value) { return userDAO.find(Long.valueOf(value)); } } 注册,如下所示:

faces-config.xml

那应该是它。要获得更多见解,您可以thisthis文章有用。