Weird behaviour when submit using @Out property
fmontezuma Nov 9, 2009 6:50 PMHi!
I´m having problems when I try to set a value to my bean.
I want to set the current classification value to it, but somehow it's having a weird behavior.
Here is the code:
@Name("classificacaoAction") @Scope(ScopeType.CONVERSATION) public class ClassificacaoAction { @In(create = true) private List<SofClassificacao> listaClassificacoes; @Out(required = false) private SofClassificacaoRomaneio classificacaoAtual; @In private GerenciarRomaneioAction sofGerenciarRomaneioAction; @Out private SofRomaneio romaneio; @Factory(value = "romaneio", autoCreate = true) public void carregarRomaneio() { romaneio = sofGerenciarRomaneioAction.getRomaneio(); // inicializa classificacoes if (romaneio.getSofClassificacaoRomaneios().isEmpty()) { romaneio.setSofClassificacaoRomaneios(new LinkedHashSet<SofClassificacaoRomaneio>()); Set<SofClassificacaoRomaneio> lista = romaneio.getSofClassificacaoRomaneios(); for (SofClassificacao classificacao : listaClassificacoes) { SofClassificacaoRomaneio classificacaoRomaneio = new SofClassificacaoRomaneio(); classificacaoRomaneio.setSofRomaneio(romaneio); classificacaoRomaneio.setSofClassificacao(classificacao); classificacaoRomaneio.setPcDesconto(BigDecimal.ONE); lista.add(classificacaoRomaneio); } } classificacaoAtual = romaneio.getSofClassificacaoRomaneios().iterator().next(); } public void proximaClassificacao() { if (classificacaoAtual != null) { Integer classificacaoAtualId = classificacaoAtual.getId().getCdClassificacao(); Iterator<SofClassificacaoRomaneio> i = romaneio.getSofClassificacaoRomaneios().iterator(); SofClassificacaoRomaneio cr = i.next(); // 1o valor - nunca será satisfatório while (i.hasNext() && cr.getId().getCdClassificacao() <= classificacaoAtualId) { cr = i.next(); } if (cr.getId().getCdClassificacao() > classificacaoAtualId) { classificacaoAtual = cr; } else { classificacaoAtual = null; } } } }
And the page (it is included in another page, there is a form around it):
<rich:tab label="Classificação" id="gr-aba-classificacao" 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:s="http://jboss.com/products/seam/taglib" xmlns:a="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich"> <s:div id="classif-romaneio" rendered="#{editarRomaneio}"> <s:decorate id="classificacaoAtualField" template="layout/custom-edit.xhtml" rendered="#{classificacaoAtual != null}"> <ui:define name="label">#{classificacaoAtual.sofClassificacao.dsClassificacao}</ui:define> <h:inputText value="#{classificacaoAtual.psDesconto}" /> </s:decorate> <a:commandButton action="#{classificacaoAction.proximaClassificacao}" value="Salvar" rendered="#{classificacaoAtual != null}"> <a:support event="oncomplete" reRender="classif-romaneio, tblClassificacoes" /> </a:commandButton> </s:div> <rich:dataTable id="tblClassificacoes" value="#{romaneio.sofClassificacaoRomaneios.toArray()}" var="_classif"> <rich:column> <f:facet name="header">Descricao</f:facet> <h:outputText value="#{_classif.sofClassificacao.dsClassificacao}" /> </rich:column> <rich:column> <f:facet name="header">PS-Desconto</f:facet> <h:outputText value="#{_classif.psDesconto}" /> </rich:column> <rich:column> <f:facet name="header">PC-Desconto</f:facet> <h:outputText value="#{_classif.pcDesconto}" /> </rich:column> <a:support event="onRowClick" action="#{classificacaoAction.setClassificacaoAtual(_classif)}" reRender="classif-romaneio" rendered="#{editarRomaneio}"/> </rich:dataTable> </rich:tab>
When I click the button it's calling the proximaClassificacao method but the classificacaoAtual property still have the old value (looking at debug). After the reRender I can see that the old
classificacaoAtual and the new
classificacaoAtual, both have the value that I typed in the input text.
Any clue of what´s happening?
Thanks in advance.