Problema com setPropertyActionListener e double

0 respostas
savioalberto

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="&bull; 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.

Criado 29 de dezembro de 2010
Respostas 0
Participantes 1