JSF,rich:pickList和自定义转换器 - 解决“验证错误:值无效”消息

时间:2015-01-16 16:33:04

标签: validation jsf picklist

我正在创建一个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());

    }

0 个答案:

没有答案