我正在创建一个JSF 2.0项目,当我使用带有自定义转换器的rich:pickList(richfaces 4)组件时,我遇到了一个问题。
我可以正确填充选项列表左栏。但是,当我将一些项目从左侧列表移动到右侧(通过单击pickList"添加"按钮)并尝试提交包含pickList的表单时,我收到以下错误消息:
" mainForm:选项列表:验证错误:值无效"
我已经在我的模型类(Pessoas.java)中覆盖了equals和hashCode方法,但问题仍然存在。
有关问题的任何提示?
谢谢!
cadastroEvento.xhtml
<rich:pickList id="picklist" converter="ApresentadorEventoConverter" value="#{CadastroEventoBean.pessoasSelecionadas}" var="pessoa" sourceCaption="Pessoas disponíveis" targetCaption="Pessoas selecionadas" listWidth="365px" listHeight="250px" orderable="false">
<f:selectItems value="#{CadastroEventoBean.pessoas}" />
<rich:column>
#{pessoa.nomeCompleto}
</rich:column>
</rich:pickList>
CadastroEventoBean.java
public class CadastroEventoBean {
private List<Pessoa> pessoas;
private List<Pessoa> pessoasSelecionadas;
/* getters and setters */
...
}
Pessoa.java(模型 - 由hibernate自动创建)
public class Pessoa implements java.io.Serializable {
private long cpf;
private String nomeCompleto;
private String email;
private String telefoneContato;
private String senhaLogin;
private String cidadeResidencia;
private String estadoResidencia;
private NaoAlunoIftm naoAlunoIftm;
private AlunoIftm alunoIftm;
private Set apresentador_evento = new HashSet(0);
private Set evento_vai_assistir = new HashSet(0);
private boolean logged = false;
/* getters and setters */
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Pessoa))
return false;
Pessoa pessoa = (Pessoa) obj;
if(new Long(this.cpf).equals(new Long(pessoa.cpf))){
return true;
}
return false;
}
@Override
public int hashCode() {
Long x = new Long(this.cpf);
return (x.hashCode());
}
}
EventSelectedApresentadorEventoConverter.java (自定义转换器)
@FacesConverter("ApresentadorEventoConverter")
public class EventSelectedApresentadorEventoConverter implements Converter{
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
if (arg2 == null || arg2.isEmpty())
return null;
return PessoaLogic.getByID(Long.valueOf(arg2).longValue());
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
if (!(arg2 instanceof Pessoa))
return null;
return String.valueOf(((Pessoa) arg2).getCpf());
}