Bom dia, estou criando um conversor para converter o meu resultado do selectOneMenu, pois quando eu chamo no meu selectOneMenu ficando assim.
<p:outputLabel value="Marca: " for="marca" />
<p:selectOneMenu id="marca" value="#{produtoBean.produto.marca}"
required="true" requiredMessage="Marca obrigatória"
converter="produtoConverter">
<f:selectItem itemValue="" itemLabel="Selecione a opção" />
<f:selectItems value="#{produtoBean.marcas}" var="marca"
itemLabel="#{marca.marca}" itemValue="#{marca}" />
</p:selectOneMenu>
Dai quando abro a pagina de cadastrar o produto, onde tem nome preço etc... também tem o campo de marca, ai escolho a minha marca, e quando clico em salvar o meu campo marca some e aparece a mensagem marca obrigatória porque eu deixei como obrigatória, ai quando tiro o meu converter="produtoConverter" do meu selectOneMenu a minha marca na hora de salvar não some, mas dai não faz o converter. Estou errando na hora de converter?
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import br.com.bercalini.borracharia.Dao.ProdutoDao;
import br.com.bercalini.borracharia.modelo.Produto;
@FacesConverter("produtoConverter")
public class ProdutoConverter implements Converter{
@Override
public Object getAsObject(FacesContext context, UIComponent componente, String valor) {
try {
Long codigo = Long.parseLong(valor);
ProdutoDao dao = new ProdutoDao();
Produto porId = dao.buscarPorId(codigo);
return porId;
}catch (RuntimeException e) {
return null;
}
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object objeto) {
try {
Produto produto = (Produto) objeto;
Long codigo = produto.getCodigo();
return codigo.toString();
}catch (RuntimeException e) {
return null;
}
}
}
Depois crio o meu equals no produto.
@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 (codigo == null) {
if (other.codigo != null)
return false;
} else if (!codigo.equals(other.codigo))
return false;
return true;
}
Algo errado? porque sera esse problema?