Good evening. I have a little problem chatinho about 3 days, I can not get the value of selectOneMenu for the product, for example: I have three categories of products: Tapiocas, Snacks and Beverages. When selecting one, the low select updates with the products coming from the bank, (so far, well the list appears right), but when I select the product and send the form it goes empty. I would appreciate your help.
CloseClick.xhtml
<!-- JANELA QUE VAI SE ABRIR PARA ADCIONAR UM PEDIDO -->
<p:dialog header="Cadastrar Pedido"
widgetVar="dialogGerRIns"
resizable="true"
modal="true"
showEffect="explode"
width="500">
<p:growl id="mensagens" showDetail="true" showSummary="false" />
<h:form prependId="false" id="tres">
<h:panelGrid id="infosRIns" columns="2" cellpadding="5">
<p:outputLabel for="categoria" value="Categorias: " />
<p:selectOneMenu id="categoria" value="#{fecharConta.categoria}" style="width:190px">
<p:ajax listener="#{fecharConta.onCountryChange}" update="produtoCategoria" />
<f:selectItem itemLabel="Selecione Categoria" itemValue="" noSelectionOption="true" />
<f:selectItems value="#{fecharConta.categorias}" />
</p:selectOneMenu>
<p:outputLabel for="produtoCategoria" value="Produto: " />
<p:selectOneMenu id="produtoCategoria" value="#{fecharConta.produtoCategoria}" converter="converterProduto" style="width:190px">
<f:selectItem itemLabel="Selecione Produto" itemValue="" noSelectionOption="true" />
<f:selectItems value="#{fecharConta.produtosCategorias}" />
</p:selectOneMenu>
</h:panelGrid>
<p:commandButton value="Submit" update=":mensagens,:novoProduto,:tabela2" actionListener="#{fecharConta.displayLocation}" icon="ui-icon-check" />
<p:commandButton update="" oncomplete="PF('dialogGerRIns').hide()" value="Cancelar"/>
<p:separator />
</h:form>
closeConta.bean
@ManagedBean
@ViewScoped
public class FecharConta implements Serializable{
// VARIAVEIS PARA MUDAR O PRODUTO DE ACORDO COM SUA CATEGORIA
private String categoria;
private String produtoCategoria=null;
private Map<String,Map<String,String>> data = new HashMap<String, Map<String,String>>();
private Map<String,String> categorias;
private Map<String,String> produtosCategorias;
//
@PostConstruct
public void init(){
categorias = new HashMap<String, String>();
categorias.put("Tapiocas", "Tapiocas");
categorias.put("Lanche", "Lanche");
categorias.put("Bebidas", "Bebidas");
// PREENCHENDO A CATEGORIA REFERENTES A TAPIOCA
listaTapiocas = TapiocariaFacade.listarProdutoTapiocas();
Map<String,String> map = new HashMap<String, String>();
for (Produto produto : listaTapiocas) {
map.put(produto.getNome(), produto.getNome().toString());
}
data.put("Tapiocas", map);
//
// PREENCHENDO A CATEGORIA REFERENTES A LANCHES
listaLanches = TapiocariaFacade.listarProdutoLanches();
map = new HashMap<String, String>();
for (Produto produto : listaLanches) {
map.put(produto.getNome(), produto.getNome().toString());
}
data.put("Lanche", map);
//
// PREENCHENDO A CATEGORIA REFERENTES A BEBIDAS
listaBebidas = TapiocariaFacade.listarProdutoBebidas();
map = new HashMap<String, String>();
for (Produto produto : listaBebidas) {
map.put(produto.getNome(), produto.getNome().toString());
}
data.put("Bebidas", map);
//
}
// REALIZAR TROCA DO PRODUTO APOS SELECIONAR A SUA CATEGORIA
public void onCountryChange() {
if(categoria !=null && !categoria.equals(""))
produtosCategorias = data.get(categoria);
else
produtosCategorias = new HashMap<String, String>();
}
//
// ENVIANDO MENSAGEM CASO NAO SEJA SELEICONADO NENHUM PRODUTO
public void displayLocation() {
FacesMessage msg;
if(produtoCategoria != null && categoria!=null){
System.out.println(categoria +"---"+produtoCategoria);
msg = new FacesMessage("Selecionado", produtoCategoria + " De " + categoria);
FacesContext.getCurrentInstance().addMessage(null, msg);
}else{
System.out.println("nao tem nada seleciondo");
msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Invalid", "Produto não selecionado!.");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
}
//
Product.class
public class Produto {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="produto_id")
private long id;
private String nome;
private String tipo;
private long codigo;
private double preco;
@ManyToMany(mappedBy="produto", cascade=CascadeType.REMOVE)
private List<Pedido>pedido;
public List<Pedido> getPedido() {
return pedido;
}
public void setPedido(List<Pedido> pedido) {
this.pedido = pedido;
}
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 getTipo() {
return tipo;
}
public void setTipo(String tipo) {
this.tipo = tipo;
}
public double getPreco() {
return preco;
}
public void setPreco(double preco) {
this.preco = preco;
}
public long getCodigo() {
return codigo;
}
public void setCodigo(long codigo) {
this.codigo = codigo;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((nome == null) ? 0 : nome.hashCode());
result = prime * result + ((tipo == null) ? 0 : tipo.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;
Produto other = (Produto) obj;
if (nome == null) {
if (other.nome != null)
return false;
} else if (!nome.equals(other.nome))
return false;
if (tipo == null) {
if (other.tipo != null)
return false;
} else if (!tipo.equals(other.tipo))
return false;
return true;
}
}