ArrayList - Scopo Session

15 respostas
F

Boa tarde pessoal,

Estou com um problema no meu arrayList…

É assim…

Toda vez que eu digito um valor… ele popula um arrayList e adiciona vários inputText na tela de acordo com uma porcentagem… cada input terá o seu valor…

Quando eu me logo no sistema e acesso a primeira vez a pagina blz…ele faz perfeito…

se eu altero aquele valor… ele jah fica com erro… pq ele não altera o valor do primeiro text…

Sempre que eu chamo meu metodo eu dou um new arraylist… para ele zerar e popular de novo…

Eu debuguei e ele faz isso…zera e popula bonitinho… porém na tela os valores não aparecem corretos… parece que fica alguma sujeira…alguém sabe como eu resolvo isso???

Se eu uso o scopo request ai ele faz certinho funfa que eh uma blz…porém quando eu clico em salvar…essa budega perde os dados do meu array… =´[

já com o sessio n não… o valor fica la…porém ele fica exibindo na tela o valor errado…mas no array list os valores estão certos…alguém me ajuda please… =´[

vlwww

15 Respostas

Hebert_Coelho

Após salvar, chame um refresh no form.

F

Desculpe…

mas como eu chamo o refresh??

Hebert_Coelho

Coloca sua página aí.

F
Pagina xhtml
<!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:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">

<ui:composition template="/templates/interna.xhtml">
	<ui:define name="titulo">
		    Pedidos de Serviço
		</ui:define>
	<ui:define name="corpo">
		<p:ajaxStatus onstart="statusDialog.show();"
			onsuccess="statusDialog.hide();" />

		<p:dialog modal="true" widgetVar="statusDialog" header="Status"
			draggable="false" closable="false">
			<h:graphicImage style="align: center" library="imagens"
				name="loading.gif" />
		</p:dialog>
		<h:form id="formPedido">
			<p:growl id="growl" showDetail="true" />
			<p:panel id="empresa" header="Informações do Fornecedor">
			<p:messages />
			<h:inputHidden value="#{pedidoBean.pedidoServico.codigo}" />
			<h:inputHidden value="#{pedidoBean.contrato.codigo}" />
				<h:panelGrid columns="2">
					<h:panelGroup>
						<h:outputLabel value="Fornecedor: " for="fornecedor" />
					</h:panelGroup>
					<h:panelGroup>
						<h:outputLabel value="Nº do Contrato " for="contrato" />
					</h:panelGroup>
					<h:panelGroup>
						<p:selectOneMenu id="fornecedor"
							value="#{pedidoBean.empresa.empresa}">
							<f:selectItem itemValue="" itemLabel="Selecione..." />
							<f:selectItems value="#{pedidoBean.fornecedores}" />
							<f:ajax execute="fornecedor" render="empresa" event="change"
								listener="#{pedidoBean.buscarContrato}"></f:ajax>
						</p:selectOneMenu>
					</h:panelGroup>
					<h:panelGroup>
						<p:inputText id="contrato" disabled="true" required="true"
							requiredMessage="Nº do contrato obrigatório"
							value="#{pedidoBean.contrato.numero}" />
					</h:panelGroup>
				</h:panelGrid>
			</p:panel>
			<br />
			<p:panel id="pedido" header="Dados do pedido de serviço">
				<h:panelGrid>
					<h:panelGroup>
						<h:outputLabel value="Tipo de Serviço: " for="tipo" />
					</h:panelGroup>
					<h:panelGroup>
						<p:selectOneRadio id="tipo" value="#{pedidoBean.pedidoServico.tipo}">
							<f:selectItem itemValue="legado" itemLabel="Legado"/>
							<f:selectItem itemValue="outros" itemLabel="Outros" />
							<f:ajax execute="tipo" render="anexo" />
						</p:selectOneRadio>
					</h:panelGroup>
				</h:panelGrid>
				<h:panelGrid columns="2">
					<h:panelGroup>
						<h:outputLabel value="Nº da proposta: " for="proposta" />
					</h:panelGroup>
					<h:panelGroup>
						<h:outputLabel value="Nº anexo: " for="anexo" />
					</h:panelGroup>
					<h:panelGroup>
						<p:inputText id="proposta" required="true"
							requiredMessage="Nº da proposta obrigatório" size="10"
							maxlength="20" value="#{pedidoBean.pedidoServico.numeroProposta}" />
					</h:panelGroup>
					<h:panelGroup>
						<p:inputText id="anexo"
							value="#{pedidoBean.pedidoServico.numeroAnexo}" size="10"
							maxlength="20" disabled="#{pedidoBean.pedidoServico.tipo != 'outros'}"/>
					</h:panelGroup>
				</h:panelGrid>
				<h:panelGrid columns="2">
					<h:panelGroup>
						<h:outputLabel value="Valor Total: " for="valorTotal"></h:outputLabel>
					</h:panelGroup>
					<h:panelGroup>
						<h:outputLabel value="Dias úteis: " for="dias" />
					</h:panelGroup>
					<h:panelGroup>
						<p:inputText id="valorTotal"
							value="#{pedidoBean.pedidoServico.valorTotal}" required="true"
							requiredMessage="Valor total obrigatório" maxlength="30">
							<f:convertNumber minFractionDigits="2" />
							<f:attribute name="onkeydown"
								value="return stefaniniLib.kdAmount(event,'#.###.###.###,##');" />
							<f:attribute name="onkeyup"
								value="stefaniniLib.aAmount(event,'#.###.###.###,##');" />
						</p:inputText>
					</h:panelGroup>
					<h:panelGroup>
						<p:inputText id="dias" required="true"
							requiredMessage="Dias úteis obrigatório" size="5"
							maxlength="5" value="#{pedidoBean.pedidoServico.qtdDiasUteis}" >
							<f:ajax execute="pedido" render="gridParcela" event="blur" listener="#{pedidoBean.criaText}"></f:ajax>
						</p:inputText>
					</h:panelGroup>
				</h:panelGrid>
				</p:panel>
				<p:panel id="panelParcela" header="Parcelas" >
				<h:panelGrid columns="1" id="gridParcela">
					<h:panelGroup>
							<h:outputLabel value="Nº Parcelas" for="parcela" />
						</h:panelGroup>
					<h:panelGroup>
						<p:inputText id="parcela"
							value="#{pedidoBean.pedidoServico.qtdParcela}" required="true"
							requiredMessage="Nº parcelas obrigatório" size="3" maxlength="3" >
						</p:inputText>
					</h:panelGroup>
					<h:panelGroup>
						<ui:repeat value="#{pedidoBean.parcelas}" var="ped">
							<h:panelGrid columns="2">
								<h:panelGroup>
									<h:outputLabel value="Parcela:" />
								</h:panelGroup>
								<h:panelGroup>
									<h:outputLabel value="Data de vencimento: " />
								</h:panelGroup>
								<h:panelGroup>
									<p:inputText value="#{ped.valorParcela}">
										
										<f:attribute name="onkeydown"
											value="return stefaniniLib.kdAmount(event,'#.###.###.###,##');" />
										<f:attribute name="onkeyup"
											value="stefaniniLib.aAmount(event,'#.###.###.###,##');" />
									</p:inputText>
								</h:panelGroup>
								<h:panelGroup>
									<p:calendar effect="fadeIn" navigator="true" value="#{ped.dtVencimento}"/>
								</h:panelGroup>
							</h:panelGrid>
						</ui:repeat>
					</h:panelGroup>
				</h:panelGrid>
			</p:panel>
			<h:panelGrid columns="2">
				<h:panelGroup>
					<p:commandButton action="#{pedidoBean.salvar}" value="Salvar"
						update="empresa, pedido, growl, panelParcela">
					</p:commandButton>
				</h:panelGroup>
				<h:panelGroup>
					<p:ajaxStatus>
						<f:facet name="start">
							<h:graphicImage library="imagens" name="loading.gif" />
						</f:facet>
						<f:facet name="complete">
							<h:outputText value="" />
						</f:facet>
					</p:ajaxStatus>
				</h:panelGroup>
			</h:panelGrid>
		</h:form>
	</ui:define>
</ui:composition>
</html>
Classe Bean
public void criaText() {
		int dias = this.pedidoServico.getQtdDiasUteis();
		int maior = 22;
		int menor = 0;
		this.numeroParcelas = 1;
		for (numeroParcelas = 1; numeroParcelas <= 18; numeroParcelas++) {
			if (dias > menor && dias <= maior) {
				this.pedidoServico.setQtdParcela(numeroParcelas);
				break;
			}
			menor = menor + 22;
			maior = maior + 22;
		}
		this.parcelas = new ArrayList<Parcela>();
		this.valorTotal = this.pedidoServico.getValorTotal();
		this.parcelado = 0.0f;

		for (int b = 1; b <= numeroParcelas; b++) {

			switch (numeroParcelas) {
			case 1:
				this.parcelado = this.valorTotal;
				break;
			case 2:
				if (b != 2) {
					this.parcelado = Float.parseFloat(df.format(
							0.4f * this.valorTotal).replace(",", "."));
				} else {
					this.parcelado = Float.parseFloat(df.format(
							0.6f * this.valorTotal).replace(",", "."));
				}
				break;
			case 3:
				if (b != 3) {
					this.parcelado = Float.parseFloat(df.format(
							0.3f * this.valorTotal).replace(",", "."));
				} else {
					this.parcelado = Float.parseFloat(df.format(
							0.4f * this.valorTotal).replace(",", "."));
				}
				break;
			}
			Parcela parc = new Parcela();
			parc.setValorParcela(this.parcelado);
			parc.setDtVencimento(null);
			
			this.parcelas.add(parc);
		}
	}

sempre que ele perde o foco no dias úteis ele chama o metodo e faz o cálculo!

vlww pela atenção

Hebert_Coelho

Tá, mas seu problema é depois que salva ou depois que o ajax chama esse método?

F

quando o ajax chama o método…

toda vez que ele perde o foco no qtd de dias… ele tem um evento onblur…

que chama o metodo criarText…

só que esse quando ele cria os texts da pagina pelo ui:repeat…ele fica com valores incorretos…

no arrayList os valores ficam certo!

mas na pagina os texts ficam com valores diferentes…

ai só se eu deslogar e logar novamente que volta ao normal…

ele só faz certo 1 vez…se eu chamar esse metoo de novo… jah fica errado

vlw!

Hebert_Coelho

No render do ajax, coloca formPedido e testa.

F

Ficou a mesma coisa… =[

caramba…que erro estranho…

o que eu fico intrigado é que ele popula correto o array…

mas a pagina fica exibindo errado…

Hebert_Coelho

Como está seu get do método?

F

vou postar meu bean todo

/**
 * 
 */
package br.com.stefanini.sgi.web;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;


/**
 * <p>
 * <b>Title:</b> SGI - Sistema de Gestão Interno.
 * </p>
 * <p>
 * <b>Description:</b>
 * </p>
 * <p>
 * Inserir aqui a descrição do Tipo.
 * </p>
 * 
 * @author Allan Furlani Nishigouri<BR/>
 *         created 12/12/2011 <BR/>
 * @version 1.0
 */
public class PedidoServicoBean {

	private Empresa empresa = new Empresa();
	private Contrato contrato = new Contrato();
	private PedidoServico pedidoServico = new PedidoServico();
	private List<Parcela> parcelas;
	private Integer numeroParcelas = null;
	private Parcela parcela = new Parcela();
	private float valorTotal;
	private float parcelado = 0.0f;
	DecimalFormat df = new DecimalFormat("###.0");

	public String novo() {
		this.empresa = new Empresa();
		this.contrato = new Contrato();
		this.pedidoServico = new PedidoServico();
		this.numeroParcelas = null;
		this.parcela = new Parcela();
		this.parcelado = 0.0f;
		this.valorTotal = 0.0f;
		return "/restrito/pedido_servico/pedido_servico";
	}

	public void salvar() {
		FacesContext context = FacesContext.getCurrentInstance();
		ContratoRN contratoRN = new ContratoRN();
		ParcelaRN parcelaRN = new ParcelaRN();
		PedidoServicoRN pedidoServicoRN = new PedidoServicoRN();

		Contrato con = contratoRN.carregar(this.contrato.getCodigo());
		this.pedidoServico.setContrato(con);

		pedidoServicoRN.salvar(this.pedidoServico);

		this.parcela.setPedidoServico(this.pedidoServico);

		for (int i = 1; i <= this.parcelas.size(); i++) {
			if (this.parcelas != null) {
				//this.parcela.setValorParcela(Float.parseFloat(this.parcelas.get(i)));
				this.parcela.setDtVencimento(new Date(System.currentTimeMillis()));
				parcelaRN.salvar(this.parcela);
			}
		}

		FacesMessage facesMessage = new FacesMessage(
				"Pedido de serviço salvo com sucesso");
		context.addMessage(null, facesMessage);
		this.novo();
	}

	public void criaText() {
		int dias = this.pedidoServico.getQtdDiasUteis();
		int maior = 22;
		int menor = 0;
		this.numeroParcelas = 1;
		for (numeroParcelas = 1; numeroParcelas <= 18; numeroParcelas++) {
			if (dias > menor && dias <= maior) {
				this.pedidoServico.setQtdParcela(numeroParcelas);
				break;
			}
			menor = menor + 22;
			maior = maior + 22;
		}
		this.parcelas = new ArrayList<Parcela>();
		this.valorTotal = this.pedidoServico.getValorTotal();
		this.parcelado = 0.0f;

		for (int b = 1; b <= numeroParcelas; b++) {

			switch (numeroParcelas) {
			case 1:
				this.parcelado = this.valorTotal;
				break;
			case 2:
				if (b != 2) {
					this.parcelado = Float.parseFloat(df.format(
							0.4f * this.valorTotal).replace(",", "."));
				} else {
					this.parcelado = Float.parseFloat(df.format(
							0.6f * this.valorTotal).replace(",", "."));
				}
				break;
			case 3:
				if (b != 3) {
					this.parcelado = Float.parseFloat(df.format(
							0.3f * this.valorTotal).replace(",", "."));
				} else {
					this.parcelado = Float.parseFloat(df.format(
							0.4f * this.valorTotal).replace(",", "."));
				}
				break;
			}
			Parcela parc = new Parcela();
			parc.setValorParcela(this.parcelado);
			parc.setDtVencimento(null);
			
			this.parcelas.add(parc);
		}
	}

	/**
	 * @return the listaEstado
	 */
	public List<SelectItem> getFornecedores() {
		EmpresaRN empresaRN = new EmpresaRN();
		List<Empresa> listaEmpresa = empresaRN.listar();
		List<SelectItem> itens = new ArrayList<SelectItem>(listaEmpresa.size());
		for (Empresa s : listaEmpresa) {
			itens.add(new SelectItem(s.getEmpresa(), s.getCnpj() + " "
					+ s.getRazaoSocial()));
		}
		return itens;
	}

	public void buscarContrato() {
		ContratoRN contratoRN = new ContratoRN();
		EmpresaRN empresaRN = new EmpresaRN();
		this.empresa = empresaRN.carregar(this.empresa.getEmpresa());
		this.contrato = contratoRN.carregar(this.empresa.getContrato()
				.getCodigo());
	}

	/**
	 * @return the empresa
	 */
	public Empresa getEmpresa() {
		return empresa;
	}

	/**
	 * @param empresa
	 *            the empresa to set
	 */
	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

	/**
	 * @return the contrato
	 */
	public Contrato getContrato() {
		return contrato;
	}

	/**
	 * @param contrato
	 *            the contrato to set
	 */
	public void setContrato(Contrato contrato) {
		this.contrato = contrato;
	}

	/**
	 * @return the pedidoServico
	 */
	public PedidoServico getPedidoServico() {
		return pedidoServico;
	}

	/**
	 * @param pedidoServico
	 *            the pedidoServico to set
	 */
	public void setPedidoServico(PedidoServico pedidoServico) {
		this.pedidoServico = pedidoServico;
	}

	/**
	 * @return the pedidos
	 */
	public List<Parcela> getParcelas() {
		return parcelas;
	}

	/**
	 * @param pedidos
	 *            the pedidos to set
	 */
	public void setParcelas(List<Parcela> parcelas) {
		this.parcelas = parcelas;
	}

	/**
	 * @return the parcela
	 */
	public Parcela getParcela() {
		return parcela;
	}

	/**
	 * @param parcela
	 *            the parcela to set
	 */
	public void setParcela(Parcela parcela) {
		this.parcela = parcela;
	}

}

vlw pela ajuda jakefrog

fbl.lucas
Tenta comentar o trecho de código abaixo e vê se nenhum item vai ser exibido na tela.
for (int b = 1; b <= numeroParcelas; b++) {

			switch (numeroParcelas) {
			case 1:
				this.parcelado = this.valorTotal;
				break;
			case 2:
				if (b != 2) {
					this.parcelado = Float.parseFloat(df.format(
							0.4f * this.valorTotal).replace(",", "."));
				} else {
					this.parcelado = Float.parseFloat(df.format(
							0.6f * this.valorTotal).replace(",", "."));
				}
				break;
			case 3:
				if (b != 3) {
					this.parcelado = Float.parseFloat(df.format(
							0.3f * this.valorTotal).replace(",", "."));
				} else {
					this.parcelado = Float.parseFloat(df.format(
							0.4f * this.valorTotal).replace(",", "."));
				}
				break;
			}
			Parcela parc = new Parcela();
			parc.setValorParcela(this.parcelado);
			parc.setDtVencimento(null);
			
			this.parcelas.add(parc);
		}
F

Comentei…

nenhum item na tela…

fbl.lucas

Furlani:
Comentei…

nenhum item na tela…


poderia me dizer quais são os valores que não estão sendo exibidos corretamente?

F

No evento onblur no text qtdade de dias uteis…

Dependendo da quantidade de dias ele faz um calculo para saber qual a quantidade de parcelas e qual o valor de cada parcela…

Ele popula um arrayList e monta dinamicamente vários inputtexts na tela de acordo com a quantidade de parcelas.

Quando eu me logo no sistema, o primeiro acesso… ele calcula certinho…

Quanto eu digito outra quantidade de dias… jah da erro… ele exibe valores incorretos…

porémm o arraylist possui os valores certos e retorna correto(debugando eu vi os valores certinhos)

mas na exibição da tela fica incorreto!

vlw!

fbl.lucas

Caso você acesse a tela informe a quantidade de dias, depois altera esta quantidade.
Ele esta mantendo os mesmos valores exibidos quando você informou a qtd pela primeira vez ou está exibindo algo aleatório?

Criado 26 de dezembro de 2011
Ultima resposta 26 de dez. de 2011
Respostas 15
Participantes 3