Equivalent Spring custom Collection property editor when using JSF

不羁的心 提交于 2019-12-25 03:44:12

问题


I would like to know how to use Converters in Java Server Faces similar to Spring collection property editor

Suppose the following model

public class Group {

    private String name;

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

    // getter's and setter's
}

And equivalent form

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

If i use Spring to bind users property in Group class, i call

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

How do i get the same effect when using Java Server Faces ?

regards,


回答1:


For that you can implement javax.faces.convert.Converter. Its API is pretty self-explaining: write the getAsString() method accordingly that it returns the String representation of the Object, which can be under each the technical ID such as userId. Then, to get JSF set the right Object during apply request parameters phase, you need to implement getAsObject() that it returns the Object associated with the given String value.

Basically:

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));
    }

}

Register it in faces-config.xml as follows:

<converter>
    <converter-for-class>com.example.model.User</converter-for-class>
    <converter-class>com.example.converter.UserConverter</converter-class>
</converter>

That should be it. For more insights you may this or this article useful.



来源:https://stackoverflow.com/questions/1924933/equivalent-spring-custom-collection-property-editor-when-using-jsf

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!