Jsf '的转换错误设置值;空转换器';
我收到这个转换错误消息。我想从selectOneMenu列表中找到一位客户,然后给他加一笔奖金。 我实现了转换器和equals/hashcode方法。 你能看出什么不对劲吗 我的XHTML:Jsf '的转换错误设置值;空转换器';,jsf,primefaces,converter,selectonemenu,Jsf,Primefaces,Converter,Selectonemenu,我收到这个转换错误消息。我想从selectOneMenu列表中找到一位客户,然后给他加一笔奖金。 我实现了转换器和equals/hashcode方法。 你能看出什么不对劲吗 我的XHTML: <h:body> <h:form> <p:panel id="panel" header="Cadastro de bônus"> <p:panelGrid columns="2
<h:body>
<h:form>
<p:panel id="panel" header="Cadastro de bônus">
<p:panelGrid columns="2">
<p:outputLabel value="Cliente: " />
<p:selectOneMenu value="#{clienteBean.cliente}">
<f:selectItem itemLabel="--Selecione um cliente--" />
<f:selectItems value="#{clienteBean.selectClientes}" />
</p:selectOneMenu>
<p:outputLabel value="Informe o valor da venda:" for="valor_venda" />
<p:inputText id="valor_venda"
value="#{bonusBean.bonus.valor_venda}" />
<h:commandButton value="Próximo" action="#{bonusBean.gravar}" />
</p:panelGrid>
</p:panel>
</h:form>
</h:body>
</ui:define>
}
我的托管Bean:
@ManagedBean
public class ClienteBean {
private Cliente cliente;
List<Cliente> clientes;
List<SelectItem> selectClientes;
DAOCliente dao = new DAOCliente();
public List<SelectItem> getSelectClientes() throws Exception {
if(selectClientes==null){
selectClientes = new ArrayList<SelectItem>();
clientes = dao.listarTodosClientes();
if(clientes!=null && !clientes.isEmpty()){
SelectItem item;
for(Cliente lista : clientes){
item = new SelectItem(lista, lista.getNome());
selectClientes.add(item);
}
}
}
return selectClientes;
}
public List<Cliente> getClientes() throws Exception{
if(clientes == null){
clientes = dao.listarTodosClientes();
}
return clientes;
}
public Cliente getCliente() {
return cliente;
}
public void gravar() {
dao.adiciona(cliente);
this.cliente = new Cliente();
}
public void excluir(Cliente cliente) throws Exception{
dao.excluir(cliente);
}
public void setClientes(List<Cliente> clientes) {
this.clientes = clientes;
}
@ManagedBean
公共类客户bean{
私人客户;
列出客户名单;
列出选定的客户;
daoclientedao=新的DAOCliente();
公共列表getSelectClientes()引发异常{
if(selectClientes==null){
selectClientes=newarraylist();
clients=dao.listartodoclients();
if(clientes!=null&&!clientes.isEmpty()){
选择项目;
针对(客户列表A:客户){
item=newselectitem(lista,lista.getNome());
选择客户。添加(项目);
}
}
}
返回选定的客户;
}
public List getClientes()引发异常{
如果(客户==null){
clients=dao.listartodoclients();
}
回头客;
}
公共客户getCliente(){
回头客;
}
公墓{
dao.adiciona(客户);
this.cliente=新客户();
}
public void excluir(Cliente Cliente)引发异常{
dao.excluir(客户);
}
公共无效设置客户(列出客户){
this.clientes=客户;
}
}
我的客户类别:
public class Cliente {
@Id @GeneratedValue
private Long id;
private String nome;
private String fone_residencia;
private String fone_celular;
private String perfil_facebook;
@OneToMany(mappedBy = "cliente", fetch = FetchType.EAGER, targetEntity = Bonus.class, cascade = CascadeType.ALL)
private List<Bonus> bonus;
public List<Bonus> getBonus() {
return bonus;
}
public void setBonus(List<Bonus> bonus) {
this.bonus = bonus;
}
public String getPerfil_facebook() {
return perfil_facebook;
}
public void setPerfil_facebook(String perfil_facebook) {
this.perfil_facebook = perfil_facebook;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getFone_residencia() {
return fone_residencia;
}
public void setFone_residencia(String fone_residencia) {
this.fone_residencia = fone_residencia;
}
public String getFone_celular() {
return fone_celular;
}
public void setFone_celular(String fone_celular) {
this.fone_celular = fone_celular;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((bonus == null) ? 0 : bonus.hashCode());
result = prime * result
+ ((fone_celular == null) ? 0 : fone_celular.hashCode());
result = prime * result
+ ((fone_residencia == null) ? 0 : fone_residencia.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((nome == null) ? 0 : nome.hashCode());
result = prime * result
+ ((perfil_facebook == null) ? 0 : perfil_facebook.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Cliente other = (Cliente) obj;
if (bonus == null) {
if (other.bonus != null)
return false;
} else if (!bonus.equals(other.bonus))
return false;
if (fone_celular == null) {
if (other.fone_celular != null)
return false;
} else if (!fone_celular.equals(other.fone_celular))
return false;
if (fone_residencia == null) {
if (other.fone_residencia != null)
return false;
} else if (!fone_residencia.equals(other.fone_residencia))
return false;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (nome == null) {
if (other.nome != null)
return false;
} else if (!nome.equals(other.nome))
return false;
if (perfil_facebook == null) {
if (other.perfil_facebook != null)
return false;
} else if (!perfil_facebook.equals(other.perfil_facebook))
return false;
return true;
}
@Override
public String toString() {
return "Cliente [id=" + id + ", nome=" + nome + ", fone_residencia="
+ fone_residencia + ", fone_celular=" + fone_celular
+ ", perfil_facebook=" + perfil_facebook + ", bonus=" + bonus
+ "]";
}
公共类客户{
@Id@GeneratedValue
私人长id;
私有字符串名称;
私人弦乐坊公寓;
私人弦乐;
私有字符串perfil_facebook;
@OneToMany(mappedBy=“cliente”,fetch=FetchType.EAGER,targetEntity=Bonus.class,cascade=CascadeType.ALL)
私人名单奖金;
公共列表getBonus(){
回报奖金;
}
公共无效挫折(列表奖金){
这个。奖金=奖金;
}
公共字符串getPerfil_facebook(){
返回perfil_facebook;
}
public void setPerfil_facebook(字符串perfil_facebook){
this.perfil_facebook=perfil_facebook;
}
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共字符串getNome(){
返回nome;
}
公共无效集合名称(字符串名称){
this.nome=nome;
}
公共字符串getFone_Residentia(){
返回fone_公寓;
}
公共无效住宅(字符串住宅){
this.fone_Residentia=fone_Residentia;
}
公共字符串getFone_celular(){
返回教堂;
}
公共无效集合(字符串集合){
this.fone_celular=fone_celular;
}
@凌驾
公共int hashCode(){
最终整数素数=31;
int结果=1;
result=prime*result+((bonus==null)?0:bonus.hashCode();
结果=素数*结果
+((fone_celular==null)?0:fone_celular.hashCode();
结果=素数*结果
+((fone_Residentia==null)?0:fone_Residentia.hashCode();
result=prime*result+((id==null)?0:id.hashCode();
result=prime*result+((nome==null)?0:nome.hashCode();
结果=素数*结果
+((perfil_facebook==null)?0:perfil_facebook.hashCode();
返回结果;
}
@凌驾
公共布尔等于(对象obj){
if(this==obj)
返回true;
if(obj==null)
返回false;
如果(getClass()!=obj.getClass())
返回false;
客户其他=(客户)obj;
如果(奖金==null){
if(other.bonus!=null)
返回false;
}如果(!bonus.equals(other.bonus))
返回false;
if(fone_celular==null){
if(other.fone_celular!=null)
返回false;
}else如果(!fone_celular.equals(other.fone_celular))
返回false;
如果(fone_Residentia==null){
如果(other.fone_residesia!=null)
返回false;
}如果(!fone_Residentia.等于(其他fone_Residentia))
返回false;
if(id==null){
if(other.id!=null)
返回false;
}如果(!id.equals(other.id))
返回false;
if(nome==null){
if(other.nome!=null)
返回false;
}else如果(!nome.equals(other.nome))
返回false;
如果(perfil_==null){
if(other.perfil_facebook!=null)
返回false;
}如果(!perfil_facebook.equals(other.perfil_facebook))
返回false;
返回true;
}
@凌驾
公共字符串toString(){
return“Cliente[id=“+id+”,nome=“+nome+”,fone_Residentia=”
+fone_Residentia+”,fone_celular=“+fone_celular
+,perfil_facebook=“+perfil_facebook+”,bonus=“+bonus
+ "]";
}
}您应该在相关标记中提及使用的转换器类,以启用转换:
<p:selectOneMenu value="#{clienteBean.cliente}" converter="converterCliente">
...
</p:selectOneMenu>
...
但我已经这样做了:@facescoverter(forClass=ClienteBean.class),该注释意味着该类被视为JSF转换器。您还必须通过需要它的标记来指示在视图中使用它的位置。我已将ManagedBean上的注释更改为:@FacesConverter(“ConverterClient”),并在SelectOne菜单中添加了converter=“ConverterClient”,但现在我收到了此错误:“验证错误:值无效”。托管beanClienteBean
与转换过程无关,只需将转换器类ConverterClient
上的注释更改为@FacesConverter(“ConverterClient”)
。是的。就这么做了。同样的错误。
public class Cliente {
@Id @GeneratedValue
private Long id;
private String nome;
private String fone_residencia;
private String fone_celular;
private String perfil_facebook;
@OneToMany(mappedBy = "cliente", fetch = FetchType.EAGER, targetEntity = Bonus.class, cascade = CascadeType.ALL)
private List<Bonus> bonus;
public List<Bonus> getBonus() {
return bonus;
}
public void setBonus(List<Bonus> bonus) {
this.bonus = bonus;
}
public String getPerfil_facebook() {
return perfil_facebook;
}
public void setPerfil_facebook(String perfil_facebook) {
this.perfil_facebook = perfil_facebook;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getFone_residencia() {
return fone_residencia;
}
public void setFone_residencia(String fone_residencia) {
this.fone_residencia = fone_residencia;
}
public String getFone_celular() {
return fone_celular;
}
public void setFone_celular(String fone_celular) {
this.fone_celular = fone_celular;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((bonus == null) ? 0 : bonus.hashCode());
result = prime * result
+ ((fone_celular == null) ? 0 : fone_celular.hashCode());
result = prime * result
+ ((fone_residencia == null) ? 0 : fone_residencia.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((nome == null) ? 0 : nome.hashCode());
result = prime * result
+ ((perfil_facebook == null) ? 0 : perfil_facebook.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Cliente other = (Cliente) obj;
if (bonus == null) {
if (other.bonus != null)
return false;
} else if (!bonus.equals(other.bonus))
return false;
if (fone_celular == null) {
if (other.fone_celular != null)
return false;
} else if (!fone_celular.equals(other.fone_celular))
return false;
if (fone_residencia == null) {
if (other.fone_residencia != null)
return false;
} else if (!fone_residencia.equals(other.fone_residencia))
return false;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (nome == null) {
if (other.nome != null)
return false;
} else if (!nome.equals(other.nome))
return false;
if (perfil_facebook == null) {
if (other.perfil_facebook != null)
return false;
} else if (!perfil_facebook.equals(other.perfil_facebook))
return false;
return true;
}
@Override
public String toString() {
return "Cliente [id=" + id + ", nome=" + nome + ", fone_residencia="
+ fone_residencia + ", fone_celular=" + fone_celular
+ ", perfil_facebook=" + perfil_facebook + ", bonus=" + bonus
+ "]";
}
<p:selectOneMenu value="#{clienteBean.cliente}" converter="converterCliente">
...
</p:selectOneMenu>