После изучения того, как написать собственный конвертер, вот решение.
1. создать класс Java, которые реализуют javax.faces.convert.Converter;
public class ProjectConverter implements Converter{
@EJB
DocumentSBean sBean;
public ProjectConverter(){
}
public Object getAsObject(FacesContext context, UIComponent component, String value){
return sBean.getProjectById(value);
//If u look below, I convert the object into a unique string, which is its id.
//Therefore, I just need to write a method that query the object back from the
//database if given a id. getProjectById, is a method inside my Session Bean that
//does what I just described
}
public String getAsString(FacesContext context, UIComponent component, Object value)
{
return ((Project) value).getId().toString(); //--> convert to a unique string.
}
}
2. Зарегистрировать свой собственный конвертер в faces-config.xml
<converter>
<converter-id>projectConverter</converter-id>
<converter-class>org.xdrawing.converter.ProjectConverter</converter-class>
</converter>
3. Так что теперь внутри компонента Primefaces, у просто сделать converter="projectConverter"
. Обратите внимание, что projectConverter
- это <convert-id>
Я только что создал. Поэтому, чтобы решить мою проблему выше, я делаю это:
<p:pickList converter="projectConverter" value="#{bean.projects}" var="project"
itemLabel="#{project.name}" itemValue="#{project}">
Интересный вопрос. К сожалению, я честно не знаю. Я думаю, вы должны задать этот вопрос и посмотреть, что говорит сообщество. Если вы сделаете это в сообщение, пожалуйста, дайте мне ссылку. Я тоже хочу знать об этом. –