我想知道如何在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时如何获得相同的效果?
的问候,
答案 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