Primeiramente, me desculpem pelo título, mas não sei mesmo como explicar esse erro em apenas uma frase.
O erro é o seguinte:
Recebi um projeto para fazer manutenção, iniciei ele e não consegui executar nenhuma inserção em qualquer formulario que tenha um campo do tipo select dentro.
Qualquer campo do tipo select que eu escolha me dá um erro de validação “Valor selecionado inválido”, que é um erro definido no faces config como:
javax.faces.component.UISelectOne.INVALID=Valor selecionado inválido
Aqui vão exemplos de código que deu erro:
formulário:
<?xml version="1.0" encoding="ISO-8859-1"?>
<f:view xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ice="http://www.icesoft.com/icefaces/component">
<ice:outputDeclaration doctypeRoot="HTML"
doctypePublic="-//W3C//DTD HTML 4.01 Transitional//EN"
doctypeSystem="http://www.w3.org/TR/html4/loose.dtd" />
<html>
<ui:composition template="/pages/layout.jspx">
<ui:define name="title">#{msgs.menu_cliente}</ui:define>
<ui:define name="cadastro">
<!-- Formulario de cadastro -->
<ice:panelGroup id='cadastro' styleClass="#{tabBean.selectedIndex == '0' ? 'blockDiv' : 'noneDiv'}">
<ice:form>
<ice:panelGrid columns="1" width="100%" cellpadding="0" cellspacing="0" rowClasses="labelRow, compRow">
<ice:outputText value="#{msgs.codigo}" />
<ice:panelGroup>
<ice:inputText id="codigo" value="#{clienteBean.vo.codigo}" size="35" maxlength="50" readonly="true" />
<ice:message for="codigo" />
</ice:panelGroup>
<ice:outputText value="#{msgs.areaFuncionario}" />
<ice:panelGroup>
<ice:selectOneMenu id="funcionario" value="#{clienteBean.vo.funcionario}" converter="converterGeneric" >
<f:selectItems value="#{clienteBean.listarComboBoxFuncionario}" />
</ice:selectOneMenu>
<ice:message for="funcionario" />
</ice:panelGroup>
<ice:outputText value="#{msgs.razaoSocial}" />
<ice:panelGroup>
<ice:inputText id="razaoSocial" value="#{clienteBean.vo.razaoSocial}" size="35" maxlength="50" required="true"/>
<ice:message for="razaoSocial" />
</ice:panelGroup>
<ice:outputText value="#{msgs.inscrEstadual}" />
<ice:panelGroup>
<ice:inputText id="inscrEstadual" value="#{clienteBean.vo.inscrEstadual}" size="35" maxlength="50" />
<ice:message for="inscrEstadual" />
<ice:outputText value="#{msgs.inscrEstadualEX}" />
</ice:panelGroup>
<ice:outputText value="#{msgs.cnpj}" />
<ice:panelGroup>
<ice:inputText id="cnpj" value="#{clienteBean.vo.cnpj}" size="35" maxlength="50"/>
<ice:message for="cnpj" />
<!--<ice:outputText value="#{msgs.cnpjEX}" />-->
</ice:panelGroup>
<ice:outputText value="#{msgs.endereco}" />
<ice:panelGroup>
<ice:inputText id="endereco" value="#{clienteBean.vo.endereco}" size="35" maxlength="50" />
<ice:message for="endereco" />
</ice:panelGroup>
<ice:outputText value="#{msgs.bairro}" />
<ice:panelGroup>
<ice:inputText id="bairro" value="#{clienteBean.vo.bairro}" size="35" maxlength="50" />
<ice:message for="bairro" />
</ice:panelGroup>
<ice:outputText value="#{msgs.cep}" />
<ice:panelGroup>
<ice:inputText id="cep" value="#{clienteBean.vo.cep}" size="35" maxlength="50" required="true"/>
<ice:message for="cep" />
<ice:outputText value="#{msgs.cepEX}" />
</ice:panelGroup>
<ice:outputText value="#{msgs.pais}" />
<ice:panelGroup>
<ice:selectOneMenu id="paisCliente" value="#{clienteBean.pais}" converter="converterGeneric" partialSubmit="true" valueChangeListener="#{clienteBean.carregaComboBoxEstados}" styleClass="texto">
<f:selectItems value="#{clienteBean.listarComboBoxPais}"/>
</ice:selectOneMenu>
<ice:message for="paisCliente" />
</ice:panelGroup>
<ice:outputText value="#{msgs.estado}" />
<ice:panelGroup>
<ice:selectOneMenu id="estadoCliente" value="#{clienteBean.estado}" converter="converterGeneric" partialSubmit="true" valueChangeListener="#{clienteBean.carregaComboBoxCidades}" styleClass="texto">
<f:selectItems value="#{clienteBean.listarComboBoxEstado}"/>
</ice:selectOneMenu>
<ice:message for="estadoCliente" />
</ice:panelGroup>
<ice:outputText value="#{msgs.cidade}" />
<ice:panelGroup>
<ice:selectOneMenu id="cidadeCliente" value="#{clienteBean.vo.cidade}" converter="converterGeneric" styleClass="texto">
<f:selectItems value="#{clienteBean.listarComboBoxCidade}"/>
</ice:selectOneMenu>
<ice:message for="cidadeCliente" />
</ice:panelGroup>
<ice:outputText value="#{msgs.telResidencial}" />
<ice:panelGroup>
<ice:inputText id="telResidencial" value="#{clienteBean.vo.telResidencial}" size="35" maxlength="50" />
<ice:message for="telResidencial" />
</ice:panelGroup>
<ice:outputText value="#{msgs.telComercial}" />
<ice:panelGroup>
<ice:inputText id="telComercial" value="#{clienteBean.vo.telComercial}" size="35" maxlength="50" />
<ice:message for="telComercial" />
</ice:panelGroup>
<ice:outputText value="#{msgs.telFax}" />
<ice:panelGroup>
<ice:inputText id="telFax" value="#{clienteBean.vo.telFax}" size="35" maxlength="50" />
<ice:message for="telFax" />
</ice:panelGroup>
<ice:outputText value="#{msgs.contato}" />
<ice:panelGroup>
<ice:inputText id="contato" value="#{clienteBean.vo.contato}" size="35" maxlength="50" />
<ice:message for="contato" />
</ice:panelGroup>
<ice:outputText value="#{msgs.mediaGiroMensal}" />
<ice:panelGroup>
<ice:inputText id="mediaGiroMensal" value="#{clienteBean.vo.mediaGiroMensal}" size="35" maxlength="50" />
<ice:message for="mediaGiroMensal" />
<ice:outputText value="#{msgs.mediaGiroMensalEX}" />
</ice:panelGroup>
<ice:outputText value="#{msgs.capitalGiro}" />
<ice:panelGroup>
<ice:inputText id="capitalGiro" value="#{clienteBean.vo.capitalGiro}" size="35" maxlength="50" />
<ice:message for="capitalGiro" />
<ice:outputText value="#{msgs.capitalGiroEX}" />
</ice:panelGroup>
<ice:outputText value="#{msgs.sitEmpresa}" />
<ice:panelGroup>
<ice:selectOneRadio id="sitEmpresa" value="#{clienteBean.vo.sitEmpresa}">
<f:selectItem itemValue="0" itemLabel="#{msgs.alugado}"/>
<f:selectItem itemValue="1" itemLabel="#{msgs.proprio}"/>
</ice:selectOneRadio>
<ice:message for="sitEmpresa" />
</ice:panelGroup>
<ice:outputText value="#{msgs.area}" />
<ice:panelGroup>
<ice:inputText id="area" value="#{clienteBean.vo.area}" size="35" maxlength="50" />
<ice:message for="area" />
<ice:outputText value="#{msgs.areaEX}" />
</ice:panelGroup>
<ice:outputText value="#{msgs.valorAluguel}" />
<ice:panelGroup>
<ice:inputText id="valorAluguel" value="#{clienteBean.vo.valorAluguel}" size="35" maxlength="50" />
<ice:message for="valorAluguel" />
<ice:outputText value="#{msgs.valorAluguelEX}" />
</ice:panelGroup>
<ice:outputText value="#{msgs.tipoEmpresa}" />
<ice:panelGroup>
<ice:selectOneRadio id="tipoEmpresa" value="#{clienteBean.vo.tipoEmpresa}">
<f:selectItem itemValue="0" itemLabel="#{msgs.pequenaEmpresa}"/>
<f:selectItem itemValue="1" itemLabel="#{msgs.mediaEmpresa}"/>
<f:selectItem itemValue="2" itemLabel="#{msgs.grandeEmpresa}"/>
</ice:selectOneRadio>
<ice:message for="tipoEmpresa" />
</ice:panelGroup>
<ice:outputText value="#{msgs.inadimplenteCerasa}" />
<ice:panelGroup>
<ice:selectOneRadio id="inadimplenteCerasa" value="#{clienteBean.vo.inadimplenteCerasa}">
<f:selectItem itemValue="TRUE" itemLabel="#{msgs.sim}"/>
<f:selectItem itemValue="FALSE" itemLabel="#{msgs.nao}"/>
</ice:selectOneRadio>
<ice:message for="inadimplenteCerasaCliente" />
</ice:panelGroup>
<ice:outputText value="#{msgs.inadimplenteSPC}" />
<ice:panelGroup>
<ice:selectOneRadio id="inadimplenteSPC" value="#{clienteBean.vo.inadimplenteSPC}">
<f:selectItem itemValue="TRUE" itemLabel="#{msgs.sim}"/>
<f:selectItem itemValue="FALSE" itemLabel="#{msgs.nao}"/>
</ice:selectOneRadio>
<ice:message for="inadimplenteSPCCliente" />
</ice:panelGroup>
<ice:outputText value="#{msgs.natureza}" />
<ice:panelGroup>
<ice:selectOneMenu id="natureza" value="#{clienteBean.vo.natureza}" converter="converterGeneric" styleClass="texto">
<f:selectItems value="#{clienteBean.listarComboBoxNatureza}" />
</ice:selectOneMenu>
<ice:message for="natureza" />
</ice:panelGroup>
<ice:outputText value="#{msgs.usuario}" />
<ice:panelGroup>
<ice:selectOneMenu id="usuario" value="#{clienteBean.vo.usuario}" converter="converterGeneric" styleClass="texto">
<f:selectItems value="#{clienteBean.listarComboBoxUsuario}" />
</ice:selectOneMenu>
<ice:message for="usuario" />
</ice:panelGroup>
<ice:outputText value="#{msgs.concorrentes}" />
<ice:panelGroup>
<ice:inputText id="concorrentes" value="#{clienteBean.vo.concorrentes}" size="35" maxlength="50" />
<ice:message for="concorrentes" />
</ice:panelGroup>
<ice:outputText value="#{msgs.historico}"/>
<ice:panelGroup>
<ice:outputText value="#{clienteBean.vo.historico}" rendered="#{not (empty clienteBean.vo.historico)}"/>
</ice:panelGroup>
<ice:outputText value="#{msgs.adicionarAoHistorico}" rendered="#{not (empty clienteBean.vo.historico)}"/>
<ice:panelGroup>
<ice:inputTextarea id="adicionarAoHistorico" value="#{clienteBean.adicionarAoHistorico}" cols="36" rows="12" />
<ice:message for="adicionarAoHistorico" />
</ice:panelGroup>
<ice:outputText value="#{msgs.usuario}" />
<ice:panelGroup>
<ice:selectOneMenu id="user" value="#{clienteBean.usuario}" converter="converterGeneric" styleClass="texto">
<f:selectItems value="#{clienteBean.listarComboBoxUsuario}" />
</ice:selectOneMenu>
<ice:message for="user" />
</ice:panelGroup>
</ice:panelGrid>
<br/>
<ice:panelGroup>
<ice:commandButton value="#{msgs.btnSalvar}" type="submit" action="#{clienteBean.salvarOuEditarCliente}" />
<ice:commandButton value="#{msgs.btnCancelar}" type="submit" action="#{clienteBean.cancelar}" />
</ice:panelGroup>
</ice:form>
</ice:panelGroup>
</ui:define>
</ui:composition>
</html>
</f:view>
Managed Bean:
/*
* ClienteBean.java
*
* Created on 21/06/2007 17:09:19
*
*/
package com.feraweb.mb;
import com.feraweb.exception.ControleExceptions;
import com.feraweb.icefaces.TabBean;
import com.feraweb.vo.Cidade;
import com.feraweb.vo.Cliente;
import com.feraweb.vo.Funcionario;
import com.feraweb.vo.Usuario;
import java.util.ArrayList;
import java.util.List;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import org.springframework.dao.DataIntegrityViolationException;
/**
* @author script
*/
public class ClienteBean extends ComboBean {
private Integer codigo;
private String razaoSocial;
private String adicionarAoHistorico;
private String cnpj;
private String telComercial;
private Cliente cliente;
private String campoTabela;
private String chaveBusca;
private Cidade cidade;
private Funcionario funcionario;
private Usuario usuario;
private boolean hideTable = true;
private ListDataModel listaDM = new ListDataModel(new ArrayList(0));
//FRANGO: apenas para testes
public ClienteBean()
{
setVo(new Cliente());
}
public void zerarLista() {
super.setDataModel(null);
}
public String salvarOuEditarCliente() {
try {
cliente= new Cliente();
cliente = (Cliente)getVo();
//Verifica de já existe um registro com essa Razão Social e CEP
ArrayList<String> criteriaRestrictionsStr = new ArrayList();
ArrayList criteriaRestrictionsObj = new ArrayList();
List result;
criteriaRestrictionsStr.add("razaoSocial=ILIKE");
criteriaRestrictionsObj.add(cliente.getRazaoSocial());
criteriaRestrictionsStr.add("cep=EQ");
criteriaRestrictionsObj.add(cliente.getCep());
result = (super.getDao().getCriteria(Cliente.class,
null, criteriaRestrictionsStr, criteriaRestrictionsObj,null));
if (cliente.getId() == null){
if (result.isEmpty()){
//Verifica se cliente estará na área livre
if (cliente.getFuncionario() == null)
cliente.setLivre("TRUE");
cliente.setHistorico(cliente.getHistorico()+"\n"+getAdicionarAoHistorico());
getDao().saveOrUpdateObject(cliente);
setaAba("consulta");
zeraAtributos();
getMsgResposta().addSuccessMessage("Salvo com sucesso");
return "SUCESSO";
} else{
getMsgResposta().addErrorMessage("Esse registro já existe");
return "FALHA";
}
}else{
if (result.isEmpty()){
//Verifica se cliente estará na área livre
if (cliente.getFuncionario() == null)
cliente.setLivre("TRUE");
cliente.setHistorico(cliente.getHistorico()+"\n"+getAdicionarAoHistorico());
getDao().saveOrUpdateObject(cliente);
setaAba("consulta");
zeraAtributos();
getMsgResposta().addSuccessMessage("Salvo com sucesso");
return "SUCESSO";
}
else {
Cliente clienteAux = (Cliente)result.get(0);
if (clienteAux.getCodigo().equals(cliente.getCodigo())){
//Verifica se cliente estará na área livre
if (cliente.getFuncionario() == null)
cliente.setLivre("TRUE");
cliente.setHistorico(cliente.getHistorico()+"\n"+getAdicionarAoHistorico());
getDao().saveOrUpdateObject(cliente);
setaAba("consulta");
zeraAtributos();
getMsgResposta().addSuccessMessage("Salvo com sucesso");
return "SUCESSO";
}else{
getMsgResposta().addErrorMessage("Esse registro já existe");
return "FALHA";
}
}
}
} catch (DataIntegrityViolationException e) {
getMsgResposta().addErrorMessage("Esse registro já existe");
return "FALHA";
} catch (Exception e) {
getMsgResposta().addErrorMessage("Não foi possível realizar está operação");
return "FALHA";
}
}
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
public String getCampoTabela() {
return campoTabela;
}
public void setCampoTabela(String campoTabela) {
this.campoTabela = campoTabela;
}
public String getChaveBusca() {
return chaveBusca;
}
public void setChaveBusca(String chaveBusca) {
this.chaveBusca = chaveBusca;
}
public Integer getCodigo() {
return codigo;
}
public void setCodigo(Integer codigo) {
this.codigo = codigo;
}
public void setRazaoSocial(String razaoSocial) {
this.razaoSocial = razaoSocial;
}
public String getRazaoSocial() {
return razaoSocial;
}
public String getCnpj() {
return cnpj;
}
public void setCnpj(String cnpj) {
this.cnpj = cnpj;
}
public Cidade getCidade() {
return cidade;
}
public void setCidade(Cidade cidade) {
this.cidade = cidade;
}
public String getTelComercial() {
return telComercial;
}
public void setTelComercial(String telComercial) {
this.telComercial = telComercial;
}
public Funcionario getFuncionario() {
return funcionario;
}
public void setFuncionario(Funcionario funcionario) {
this.funcionario = funcionario;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public String getAdicionarAoHistorico() {
return adicionarAoHistorico;
}
public void setAdicionarAoHistorico(String adicionarAoHistorico) {
this.adicionarAoHistorico = adicionarAoHistorico;
}
}
*Boa parte desse código também não é útil para ilustrar esse exemplo, melhor se concentrar no método salvarOuEditarCliente.