Вам необходимо реализовать Converter#getAsString()
, чтобы требуемый Java-объект был представлен в уникальном строковом представлении, которое можно использовать в качестве параметра HTTP-запроса. Использование технического идентификатора базы данных (первичный ключ) очень полезно здесь.
public String getAsString(FacesContext context, UIComponent component, Object value) {
// Convert the Project object to its unique String representation.
return String.valueOf(((Project) value).getId());
}
Затем вам нужно реализовать Converter#getAsObject()
, чтобы параметр HTTP-запроса (согласно определению String
) можно было преобразовать обратно в нужный объект Java (Project
в вашем случае) ` .
public Object getAsObject(FacesContext context, UIComponent component, String value) {
// Convert the unique String representation of Project to the actual Project object.
return projectDAO.find(Long.valueOf(value));
}
Наконец, просто свяжите этот конвертер с рассматриваемым типом объекта, JSF позаботится о преобразовании, когда Project
входит в изображение, не нужно указывать converterId
или f:converter
:
<converter>
<converter-for-class>com.example.Project</converter-for-class>
<converter-class>com.example.ProjectConverter</converter-class>
</converter>
Таким образом, вы можете просто создать SelectItem
с Project
в качестве значения.
Вы можете получить некоторую справочную информацию и больше идей из этой статьи блога: http://balusc.blogspot.com/2007/09/objects-in-hselectonemenu.html