Lista nulla

Pessoal, nao sei o que esta acontecendo mas tenho a seguinte situação :

quando clico em alterar o Orçamento ele carrega todos os dados do orçamento porem ele entra na classe ItemOrcamentoHelper e executa a rotina abaixo 4 vezes .


public class ItemOrcamentoHelper{
	private List<AnaliseContratada> analisesContratadas;


	public  ItemOrcamentoHelper (ItemOrcamento itemorcamento) {
		this.analisesContratadas = itemorcamento.getAnalisesContratadas();
		this.setNumeroAmostras(itemorcamento.getNumeroAmostras());
	}


	public Dinheiro getTotalPorAmostra() {

			if (analisesContratadas.size() == 0) {
				System.err.println("****analisecontratadas nulll**** ");
			}	
		    

	return total;

}


}

A primeira vez ele retorna o valor correto, mas nao estou entendendo pq dele fazer o processo mais 3x

16:48:21,469 ERROR [STDERR] total 2.800,00
16:48:21,859 ERROR [STDERR] analisecontratadas nulll
16:48:21,859 ERROR [STDERR] total 0,00
16:48:21,859 ERROR [STDERR] analisecontratadas nulll
16:48:21,859 ERROR [STDERR] total 0,00
16:48:21,859 ERROR [STDERR] analisecontratadas nulll
16:48:21,859 ERROR [STDERR] total 0,00

Imagino eu, que a partir da segunda vez …ele perde o construtor , ai a analisecontratada fica nulla.

Alguem pode me dar uma luz???

isso é uma aplicação Web? ou Desktop?

Você tentou debugar para ver o comportamento dos seus métodos?

aplicacao web.

estava pensando em fazer assim :


public class ItemOrcamentoHelper{


	private int tagcontratada;	
	private Dinheiro valortotalitem= new Dinheiro(0.0D);

	public  ItemOrcamentoHelper (ItemOrcamento itemorcamento) {
		this.tagcontratada = 1;
		this.analisesContratadas = itemorcamento.getAnalisesContratadas();
		this.setNumeroAmostras(itemorcamento.getNumeroAmostras());		
	}

	public Dinheiro getTotalPorAmostra() {
		try {

			if (analisesContratadas.size() == 0) {
				this.tagcontratada = 0;
				System.err.println("****analisecontratadas nulll**** ");
			}	

			if (tagcontratada==1) {			 
				valortotalitem=total;				
			}			
			 
			return valortotalitem;
}
}

Na primeira vez ele atribui o valortotalitem=2800, mas na segunda vez que passa ele atribui o valortotalitem = 0 e gostaria que ficasse 2800, que é o valor que ficou da primeira vez .

Alguem pode me ajudar ???

E ai cara você fez isso que o romarcio indicou ?

fiz sim e não entendi pq ele chama esta classe 4 vezes por isso estou pensando na alternativa acima.

Onde você faz a primeira chamada a esses métodos?

Porque em algum lugar você imprime isso:
16:48:21,469 ERROR [STDERR] total 2.800,00

E não é o que você postou, porque o que postou só imprime isso
16:48:21,859 ERROR [STDERR] analisecontratadas nulll

Romarcio, vou colocar minha classe completa

Meu bean

public class ManterItemOrcamentoMB implements PageMB, OperacaoConfirmavel,
		CallbackableMB {


	private ItemOrcamento itemAtual = new ItemOrcamentoColetavel();
	
	private ItemOrcamentoHelper itemAtual1 = new ItemOrcamentoHelper(this.getItemAtual());



	public void alterarItemOrcamento() {
		ItemOrcamento item = (ItemOrcamento) itens.getRowData();
		this.indiceItemAlterado = orcamento.getIndiceItem(item);
		this.prepararAlteracaoItem();
	}

	private void prepararAlteracaoItem() {
		itemAtual1.setNumeroAmostras(itemAtual.getNumeroAmostras());
		itemAtual1.setAjusteFinanceiro(itemAtual.getAjusteFinanceiro());		
		itemAtual1.getAjusteFinanceiro().setTipoAjusteFinanceiro(itemAtual.getAjusteFinanceiro().getTipoAjusteFinanceiro());
		itemAtual1.getAjusteFinanceiro().setUnidadeAjusteFinanceiro(itemAtual.getAjusteFinanceiro().getUnidadeAjusteFinanceiro());
		
		
		System.out.println("****OK**** ");

****************** depois daqui ele entra automaticamente no meu itemorcamentohelper

*************************

classe helper
@Stateless
public class ItemOrcamentoHelper{
	//@Embedded
	private AjusteFinanceiro ajusteFinanceiro = new AjusteFinanceiro();
	
	private int tagcontratada;	
	private Dinheiro valortotalitem= new Dinheiro(0.0D);

	private List<AnaliseContratada> analisesContratadas;
	
	public  ItemOrcamentoHelper (ItemOrcamento itemorcamento) {
		this.tagcontratada = 1;
		//this.valortotalitem = new Dinheiro(0.0D);
		this.analisesContratadas = itemorcamento.getAnalisesContratadas();
		this.setNumeroAmostras(itemorcamento.getNumeroAmostras());
		
	}


	public Dinheiro getTotalPorAmostra() {
		try {
			
			
			ini = new InitialContext();
			
			
			Map<Long, Dinheiro> metodosPrecificaveis = new HashMap <Long, Dinheiro>();
			Map <Long, GruposDoMetodo> todosOsMetodosComPrecoPorGrupoEspec = new HashMap <Long, GruposDoMetodo>();
		    Dinheiro total = new Dinheiro(0.0D);

			if (analisesContratadas.size() == 0) {
				this.tagcontratada = 0;
				System.err.println("****analisecontratadas nulll**** ");
			}	
		    
		    
			PrecoPorMetodoServiceLocal PrecoPorMetodoBean = (PrecoPorMetodoServiceLocal)ini.lookup("PrecoPorMetodoServiceBean/local");
			
			
			todosOsMetodosComPrecoPorGrupoEspec = listaTodosMetodosDaAmostraComPrecoGrupo(analisesContratadas);
			total = total.soma(precoTotalDosMetodosPorGrupoDeEspec(todosOsMetodosComPrecoPorGrupoEspec));
			
			
		    for (AnaliseContratada analiseContratada : this.analisesContratadas) {
			    Metodo metodoAnalise = analiseContratada.getMetodo();		
				if (!todosOsMetodosComPrecoPorGrupoEspec.containsKey(metodoAnalise.getId())) {
					if (!metodoAnalise.isPrecificavel()) {
						total = total.soma(analiseContratada.getPreco());
					} else if (!metodosPrecificaveis.containsKey(metodoAnalise.getId())) {
					metodosPrecificaveis.put(metodoAnalise.getId(), metodoAnalise.getPreco());
					total = total.soma(metodoAnalise.getPreco());
					}
				} 
		    }		
		
		    System.err.println("****tagcontratada**** "+this.tagcontratada);
			System.err.println("****total**** "+total);
			   return total;
			 
		///	return new Dinheiro(9);
			

		 } 
			catch (Throwable ex) 
	    {
	        System.err.println("******************ERROR**************** " + ex);  
	        throw new ExceptionInInitializerError(ex); 
		 } 		
	}
*****************************************

lembrando que o meu resultado dos prints

recoporme0_.metodo_id=?
10:17:56,996 ERROR [STDERR] tagcontratada 1
10:17:57,604 ERROR [STDERR] total 2.080,00
10:18:05,704 ERROR [STDERR] analisecontratadas nulll
10:18:05,704 ERROR [STDERR] tagcontratada 0
10:18:06,250 ERROR [STDERR] total 0,00
10:18:08,247 ERROR [STDERR] analisecontratadas nulll
10:18:08,247 ERROR [STDERR] tagcontratada 0
10:18:08,437 ERROR [STDERR] total 0,00
10:18:09,227 ERROR [STDERR] analisecontratadas nulll
10:18:09,237 ERROR [STDERR] tagcontratada 0
10:18:09,597 ERROR [STDERR] total 0,00

Romarcio, vou colocar minha classe completa

Meu bean

public class ManterItemOrcamentoMB implements PageMB, OperacaoConfirmavel,
		CallbackableMB {


	private ItemOrcamento itemAtual = new ItemOrcamentoColetavel();
	
	private ItemOrcamentoHelper itemAtual1 = new ItemOrcamentoHelper(this.getItemAtual());



	public void alterarItemOrcamento() {
		ItemOrcamento item = (ItemOrcamento) itens.getRowData();
		this.indiceItemAlterado = orcamento.getIndiceItem(item);
		this.prepararAlteracaoItem();
	}

	private void prepararAlteracaoItem() {
		itemAtual1.setNumeroAmostras(itemAtual.getNumeroAmostras());
		itemAtual1.setAjusteFinanceiro(itemAtual.getAjusteFinanceiro());		
		itemAtual1.getAjusteFinanceiro().setTipoAjusteFinanceiro(itemAtual.getAjusteFinanceiro().getTipoAjusteFinanceiro());
		itemAtual1.getAjusteFinanceiro().setUnidadeAjusteFinanceiro(itemAtual.getAjusteFinanceiro().getUnidadeAjusteFinanceiro());
		
		
		System.out.println("****OK**** ");

****************** depois daqui ele entra automaticamente no meu itemorcamentohelper

*************************

classe helper
@Stateless
public class ItemOrcamentoHelper{
	//@Embedded
	private AjusteFinanceiro ajusteFinanceiro = new AjusteFinanceiro();
	
	private int tagcontratada;	
	private Dinheiro valortotalitem= new Dinheiro(0.0D);

	private List<AnaliseContratada> analisesContratadas;
	
	public  ItemOrcamentoHelper (ItemOrcamento itemorcamento) {
		this.tagcontratada = 1;
		//this.valortotalitem = new Dinheiro(0.0D);
		this.analisesContratadas = itemorcamento.getAnalisesContratadas();
		this.setNumeroAmostras(itemorcamento.getNumeroAmostras());
		
	}


	public Dinheiro getTotalPorAmostra() {
		try {
			
			
			ini = new InitialContext();
			
			
			Map<Long, Dinheiro> metodosPrecificaveis = new HashMap <Long, Dinheiro>();
			Map <Long, GruposDoMetodo> todosOsMetodosComPrecoPorGrupoEspec = new HashMap <Long, GruposDoMetodo>();
		    Dinheiro total = new Dinheiro(0.0D);

			if (analisesContratadas.size() == 0) {
				this.tagcontratada = 0;
				System.err.println("****analisecontratadas nulll**** ");
			}	
		    
		    
			PrecoPorMetodoServiceLocal PrecoPorMetodoBean = (PrecoPorMetodoServiceLocal)ini.lookup("PrecoPorMetodoServiceBean/local");
			
			
			todosOsMetodosComPrecoPorGrupoEspec = listaTodosMetodosDaAmostraComPrecoGrupo(analisesContratadas);
			total = total.soma(precoTotalDosMetodosPorGrupoDeEspec(todosOsMetodosComPrecoPorGrupoEspec));
			
			
		    for (AnaliseContratada analiseContratada : this.analisesContratadas) {
			    Metodo metodoAnalise = analiseContratada.getMetodo();		
				if (!todosOsMetodosComPrecoPorGrupoEspec.containsKey(metodoAnalise.getId())) {
					if (!metodoAnalise.isPrecificavel()) {
						total = total.soma(analiseContratada.getPreco());
					} else if (!metodosPrecificaveis.containsKey(metodoAnalise.getId())) {
					metodosPrecificaveis.put(metodoAnalise.getId(), metodoAnalise.getPreco());
					total = total.soma(metodoAnalise.getPreco());
					}
				} 
		    }		
		
		    System.err.println("****tagcontratada**** "+this.tagcontratada);
			System.err.println("****total**** "+total);
			   return total;
			 
		///	return new Dinheiro(9);
			

		 } 
			catch (Throwable ex) 
	    {
	        System.err.println("******************ERROR**************** " + ex);  
	        throw new ExceptionInInitializerError(ex); 
		 } 		
	}
*****************************************

lembrando que o meu resultado dos prints

recoporme0_.metodo_id=?
10:17:56,996 ERROR [STDERR] tagcontratada 1
10:17:57,604 ERROR [STDERR] total 2.080,00
10:18:05,704 ERROR [STDERR] analisecontratadas nulll
10:18:05,704 ERROR [STDERR] tagcontratada 0
10:18:06,250 ERROR [STDERR] total 0,00
10:18:08,247 ERROR [STDERR] analisecontratadas nulll
10:18:08,247 ERROR [STDERR] tagcontratada 0
10:18:08,437 ERROR [STDERR] total 0,00
10:18:09,227 ERROR [STDERR] analisecontratadas nulll
10:18:09,237 ERROR [STDERR] tagcontratada 0
10:18:09,597 ERROR [STDERR] total 0,00

Não consegui encontrar onde você chama o método getTotalPorAmostra() da classe ItemOrcamentoHelper.

no meu Jspx, retorna o getTotalPorAmostra

	                                        <li class="sentenceLabel noWrap labelTotal">
	                                            <h:outputLabel value="#{messages['label.totalPorAmostra']}" />
	                                            <h:inputText value="#{ManterItemOrcamentoMB.itemAtual1.totalPorAmostra}"
	                                            	readonly="true" styleClass="readOnly" />
	                                        </li>

e como o ultimo valor foi 0, ele me retorna 0

É tá complicado.

bota complicado nisso meu brod…por isso que estava tentando fazer a gambi de preencher o valor apenas 1 vez.

Ao invés de você fazer isso na classe ManterItemOrcamentoMB

private ItemOrcamentoHelper itemAtual1 = new ItemOrcamentoHelper(this.getItemAtual()); 

Você poderia tentar criar um novo método, e inicializar ItemOrcamentoHelper dentro desse método. A chamada na página web

&lt;h:inputText value="#{ManterItemOrcamentoMB.itemAtual1.totalPorAmostra}"  readonly="true" styleClass="readOnly" /&gt;  

você altera para o novo método.

Algo assim:

[code]
private Dinheiro dinheiro = new Dinheiro();

public Dinheiro getTotal() {
itemAtual1 = new ItemOrcamentoHelper(this.getItemAtual());
if (dinheiro == null) {
dinheiro = itemAtual1.getTotalPorAmostra();
}
return dinheiro;
}

<h:inputText value="#{ManterItemOrcamentoMB.total}" readonly=“true” styleClass=“readOnly” />[/code]

bom dia romarcio ,

estou ainda zuado neste problema .e reparei que as outras 3 vezes que vem com o valor 0,00, utilizando o debug ele passa nesta linha

TabPanelRenderer(RendererBase).renderChildre(FacesContext, UIComponente) line : 263,

vc sabe o que pode significar isso ??

obs. a tela que estou se referindo é a tela no anexo.


Acho que isso é o código do componente JSF.