Pessoal,
Alguém poderia me ajudar a descobrir o porquê desse erro?
j_idt7:uf: Validation Error: Value is not valid
Inicialmente o form é carregado com a lista de UFs disponíveis.
Depois seleciono uma UF e submeto o form, quando o erro ocorre.
Não usei nenhum Converter porque só preciso do idUf, não preciso carregar um objeto inteiro na combo. Tentei usar um UfConverter por desencargo, mas o erro persistiu da mesma forma (desde vez como “null Converter”).
Qualquer sugestão é bem-vinda!!
Tecnologias utilizadas:
JSF 2.0/Facelets
Tomcat 6.0.26
NetBeans 6.9.1
Java 1.6.0_21
fornecedor.xhtml:
...
<h:outputLabel value="UF" />
<h:selectOneMenu id="uf" value="#actFornecedor.mbFornecedor.mbUf.idUf}">
<f:selectItems value="#{actFornecedor.ufsDisponiveis}" />
</h:selectOneMenu>
<h:commandButton value="OK" action="#{actFornecedor.ok}" />
...
FornecedorAct.java:
@ManagedBean(name="actFornecedor")
@RequestScoped
public class FornecedorAct {
private List<SelectItem> ufsDisponiveis;
@ManagedProperty(value="#{mbFornecedor}")
private FornecedorMB mbFornecedor;
//carrega a combo UF no formulario
public void initCadastro() {
ufsDisponiveis = new ArrayList();
ufsDisponiveis.add(new SelectItem("SC", "Santa Catarina");
ufsDisponiveis.add(new SelectItem("PR", "Paraná"));
ufsDisponiveis.add(new SelectItem("RS", "Rio Grande do Sul");
}
//persiste os dados preenchidos no formulario
public String ok() {
}
//getters e setters omitidos
}
FornecedorMB.java:
@ManagedBean(name="mbFornecedor")
@RequestScoped
public class FornecedorMB implements Serializable {
private String idUf;
//getters e setters omitidos
}
Código html gerado após o form carregado:
<label>UF</label>
<select id="j_idt7:uf" name="j_idt7:uf" size="1">
<option value="SC">Santa Catarina</option>
<option value="PR">Paraná</option>
<option value="RS">Rio Grande do Sul</option>
</select>
Tenta iniciar todas as suas variáveis que estão no escopo.
Para não deixa-las nulas.
Tive um problema desse tipo e conseguir resolver assim.
Inicializei idUf="", conforme abaixo…
FornecedorMB.java:
@ManagedBean(name="mbFornecedor")
@RequestScoped
public class FornecedorMB implements Serializable {
private String idUf;
public FornecedorMB() {
this.idUf = "";
}
//getters e setters omitidos
}
… mas não funcionou
Uma coisa que não prestei atenção.
O jsf 2.0 roda na versão 7 em diante do tomcat se eu não me engano.
Ou então usa algum servidor com o padrão jee6 é o caso do glassfish 3.0 e o jboss 6
tenta colocar idUf como Integer em vez de String
Alterei de String para Integer, mas não funcionou.
Continua dando exatamente o mesmo erro
Pessoal,
Fiz um projetinho bem simples no NetBeans, desta vez usando GlassFish 3.0.1.
Porém o erro original continua, não consigo submeter a UF selecionada na combo (Validation Error: Value is not valid).
Poderiam dar uma olhada prá mim, por favor!!
Segue o projeto NetBeans (MeuTeste.zip):
http://www.streamfile.com/myid/r8D7jwwMxCew
Qualquer dica é muito bem-vinda!!
[]'s
Teste jogar este valor num atributo qualquer, mas não dentro do objeto.
Crie uma String para teste dentro do actFornecedor
private String uf;
//get e set
Substitua isso:
<h:selectOneMenu id="uf" value="#{actFornecedor.mbFornecedor.mbUf.idUf}">
Por:
<h:selectOneMenu id="uf" value="#{actFornecedor.uf}">
Acredito que mbFornecedor esteja null, por isso ele não consegue setar o valor dentro dele
Outra dica…
Altere o @RequestScoped por @SessionScoped
tenho quase certeza que a lista está indo para a visualização, mas na hora de salvar, ele perde a referencia da lista por ser apenas um request
Oi Andii,
Tentei as 2 sugestões, mas sem sucesso
Funcionou
A listagem de ufs (a ser carregada na combo), deve ser carregada no construtor do “actFornecedor”.
Estava assim…
@ManagedBean(name="actFornecedor")
@RequestScoped
public class FornecedorAct {
private List<SelectItem> ufsDisponiveis;
@ManagedProperty(value="#{mbFornecedor}")
private FornecedorMB mbFornecedor;
//carrega a combo UF no formulario
private void initCadastro() {
ufsDisponiveis = new ArrayList();
ufsDisponiveis.add(new SelectItem("SC", "Santa Catarina");
ufsDisponiveis.add(new SelectItem("PR", "Paraná"));
ufsDisponiveis.add(new SelectItem("RS", "Rio Grande do Sul");
}
//persiste os dados preenchidos no formulario
public String ok() {
return "fornecedorOK";
}
//dispara ao acessar a tela de cadastro.
public String novo() {
initCadastro();
return "fornecedorIni";
}
//getters e setters omitidos
}
… mas deve ser assim!!
@ManagedBean(name="actFornecedor")
@RequestScoped
public class FornecedorAct {
private List<SelectItem> ufsDisponiveis;
@ManagedProperty(value="#{mbFornecedor}")
private FornecedorMB mbFornecedor;
public FornecedorAct() {
initCadastro(); //DEVE SER INICIALIZADO AQUI NO CONSTRUTOR
}
//carrega a combo UF no formulario
private void initCadastro() {
ufsDisponiveis = new ArrayList();
ufsDisponiveis.add(new SelectItem("SC", "Santa Catarina");
ufsDisponiveis.add(new SelectItem("PR", "Paraná"));
ufsDisponiveis.add(new SelectItem("RS", "Rio Grande do Sul");
}
//persiste os dados preenchidos no formulario
public String ok() {
return "fornecedorOK";
}
//dispara ao acessar a tela de cadastro.
public String novo() {
//initCadastro(); //NAO DEVE ESTAR AQUI, E SIM NO CONSTRUTOR
return "fornecedorIni";
}
//getters e setters omitidos
}
Obrigado a todos pelas sugestões.