JSF 2 + PRIMEFACES 2.2RC2
Tenho um Entity que contém um valor double PRECO
@Entity
public class Produto {
@Id
@GeneratedValue
private Long id;
@NotEmpty(message="• Nome não pode estar em branco.!")
private String nome;
@NotEmpty(message="• Logo não pode estar em branco.!")
private String logo;
@NotEmpty(message="• Mini logo não pode estar em branco.!")
private String miniLogo;
private double preco;
private double comissao;
private Ativo ativo;
get.. set..
}
E um Bean ViewScoped com um objeto produto
@ManagedBean
@ViewScoped
public class ProdutoBean extends Function implements Serializable {
private static final long serialVersionUID = 1L;
private Produto produto = new Produto();
private List<Produto> listProduto;
private String findNome;
private String findAtivo;
@NotEmpty(message="• Ativo não pode estar em branco.!")
private String addAtivo;
public Produto getProduto() {
return produto;
}
public List<Produto> getListProduto() {
if( listProduto == null )
listProduto = new DAO<Produto>(Produto.class).listAll(null, "nome");
return listProduto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
public String getFindNome() {
return findNome;
}
public void setFindNome(String findNome) {
this.findNome = findNome;
}
public String getFindAtivo() {
return findAtivo;
}
public void setFindAtivo(String findAtivo) {
this.findAtivo = findAtivo;
}
public String getAddAtivo() {
return addAtivo;
}
public void setAddAtivo(String addAtivo) {
this.addAtivo = addAtivo;
}
public void onTabChange(TabChangeEvent event) {
}
public void find() {
if( !findNome.equals("") || !findAtivo.equals("") ) {
parametros.clear();
if(! findNome.equals("") )
parametros.add(new Parametro("nome", "%LIKE%", findNome));
if(! findAtivo.equals("") )
parametros.add(new Parametro("ativo", "=", Ativo.valueOf(findAtivo)));
listProduto = new DAO<Produto>(Produto.class).selectMagaiver(parametros);
msg(listProduto.size());
}
}
public void clearFind() {
if( !findNome.equals("") || !findAtivo.equals("") ) {
findNome = "";
findAtivo = "";
listProduto = new DAO<Produto>(Produto.class).listAll(null, "nome");
msg(listProduto.size());
}
}
public void add() {
produto.setAtivo(Ativo.valueOf(addAtivo));
if( produto.getId() == null ) {
new DAO<Produto>(Produto.class).add(produto);
msg("Produto adicionado com sucesso", "info");
} else {
new DAO<Produto>(Produto.class).update(produto);
msg("Produto atualizado com sucesso", "info");
}
clearAddDel();
}
public void del() {
}
public void clearAddDel() {
addAtivo = "";
produto = new Produto();
listProduto = null;
}
}
e essa view
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:body>
<ui:composition template="../TemplateFusionnet.xhtml">
<ui:define name="areaeditavel">
<div>
<div class="tituloConteudo">Cadastro de Produtos</div>
<div id="conteudoRolagem">
<div id="menuInterno">
<p:menu model="#{permissaoBean.menuModel}"/>
</div>
<div id="conteudoLadoMenuInterno">
<p:tabView effect="opacity" effectDuration="normal" widgetVar="tabView"
tabChangeListener="#{produtoBean.onTabChange}"
onTabChangeUpdate="formTable:msgs">
<p:tab title="Pesquisar">
<h:form id="find">
<h:panelGrid columns="2" id="panelGridFind">
<h:outputLabel value="Nome:"/>
<h:inputText value="#{produtoBean.findNome}"/>
<h:outputLabel value="Ativo:"/>
<h:selectOneMenu value="#{produtoBean.findAtivo}">
<f:selectItem itemLabel="Selecione" itemValue=""/>
<f:selectItems value="#{produtoBean.listAtivo}" var="a" itemLabel="#{a}" itemValue="#{a}"/>
</h:selectOneMenu>
</h:panelGrid>
<h:panelGrid columns="2" id="panelGridFindBtt">
<p:commandButton value="Pesquisar" actionListener="#{produtoBean.find}" update="find formTable:tableProdutos formTable:msgs" image="ui-icon ui-icon-search"/>
<p:commandButton value="Limpar" actionListener="#{produtoBean.clearFind}" update="find formTable:tableProdutos formTable:msgs" image="ui-icon ui-icon-close"/>
</h:panelGrid>
</h:form>
</p:tab>
<p:tab title="Adicionar">
<h:form id="add">
<h:panelGrid columns="2" id="panelGridAdd">
<h:outputLabel value="Nome:"/>
<h:inputText value="#{produtoBean.produto.nome}"/>
<h:outputLabel value="Preço(R$):"/>
<h:inputText id="addPreco" value="#{produtoBean.produto.preco}">
<f:convertNumber locale="pt_BR" type="currency"/>
</h:inputText>
<h:outputLabel value="Comissão(%):"/>
<h:inputText value="#{produtoBean.produto.comissao}" autocomplete="off"/>
<h:outputLabel value="Logo:"/>
<h:inputText value="#{produtoBean.produto.logo}" autocomplete="off"/>
<h:outputLabel value="Mini Logo:"/>
<h:inputText value="#{produtoBean.produto.miniLogo}"/>
<h:outputLabel value="Ativo:"/>
<h:selectOneMenu value="#{produtoBean.addAtivo}">
<f:selectItem itemLabel="Selecione" itemValue=""/>
<f:selectItems value="#{produtoBean.listAtivo}" var="a" itemLabel="#{a}" itemValue="#{a}"/>
</h:selectOneMenu>
<p:commandButton value="Salvar" actionListener="#{produtoBean.add}" update="add formTable:tableProdutos formTable:msgs" image="ui-icon ui-icon-disk"/>
</h:panelGrid>
</h:form>
</p:tab>
</p:tabView>
<h:form id="formTable">
<p:messages id="msgs"/>
<div class="exporter">
<h:commandLink>
<h:graphicImage library="img" name="pdf32.png"/>
<p:dataExporter type="pdf" target="tableProdutos" fileName="Produtos" excludeColumns="4"/>
</h:commandLink>
<h:commandLink>
<h:graphicImage library="img" name="excel32.png"/>
<p:dataExporter type="xls" target="tableProdutos" fileName="Produtos" excludeColumns="4"/>
</h:commandLink>
</div>
<p:dataTable id="tableProdutos" var="p" value="#{produtoBean.listProduto}" paginator="true" rows="30" emptyMessage="Nenhum registro encontrado">
<f:facet name="header">
<h:outputText value="Produtos"/>
</f:facet>
<p:column>
<f:facet name="header">
<h:outputText value="Nome" />
</f:facet>
<h:outputText value="#{p.nome}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Preço(R$)" />
</f:facet>
<h:outputText value="#{p.preco}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Comissão(%)" />
</f:facet>
<h:outputText value="#{p.comissao}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Logo" />
</f:facet>
<h:outputText value="#{p.logo}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Mini Logo" />
</f:facet>
<h:outputText value="#{p.miniLogo}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Ativo" />
</f:facet>
<h:outputText value="#{p.ativo}"/>
</p:column>
<p:column headerText="">
<p:commandLink oncomplete="confirmDialogProdutos.show();" update="formTable:msgs">
<h:graphicImage class="img_del" library="img" name="del_mini.png"/>
<f:setPropertyActionListener value="#{p}" target="#{produtoBean.produto}"/>
</p:commandLink>
<!-- LINK UPDATE -->
<p:commandLink update="add" oncomplete="setTab(1)">
<f:setPropertyActionListener value="#{p}" target="#{produtoBean.produto}"/>
<f:setPropertyActionListener value="#{p.ativo}" target="#{produtoBean.addAtivo}"/>
<h:graphicImage class="border0" library="img" name="edit_mini.png"/>
</p:commandLink>
</p:column>
</p:dataTable>
</h:form>
</div>
</div>
</div>
</ui:define>
</ui:composition>
</h:body>
</html>
Se eu acessar a página e clicar no link de update em algum registro da dataTable o produto é setado no formulario ADD normalmente. Mas se eu acessar a aba ADICIONAR e tentar inserir um produto e por exemplo não colocar o nome, vai cair na validação, e logo após clicar no link de update em algum registro da dataTable… o produto é setado mais os valores double (ex: preco) ficam zerados.
Tentei de várias formas… ja tirei o convertNumber e nada funcionou.
Ja pesquisei na internet e aqui no forúm também, mas ainda não encontrei nada.
Qualquer ajuda agradeço .Valeu.