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
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
<h:inputText value="#{ManterItemOrcamentoMB.itemAtual1.totalPorAmostra}" readonly="true" styleClass="readOnly" />
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.