problemas ao passar parâmetros para o método
Olá, estou passando pelo seguinte problema: Numa página tenho uma rich:Table com uma lista de produtos a receber, nela eu digito o lote, validade e quantidade, os três são campos rich:inplaceInput apontados para suas respectivas variáveis. Ao final da mesma linha tenho um botão "Gravar", este um a4j:commandButton chamando o respectivo método. Pelo debug percebo que as variáveis estão "null", não sei mais o que fazer para passar esses valores, já tentei com o f:setPropertyActionListener, já tentei chamar o método por um a4j:support, mas sem sucesso.
Agradeço desde já.
R.B.
Agradeço desde já.
R.B.
Barcelos.java
Curtidas 0
Respostas
Davi Costa
18/04/2011
Já tentou usar a tag:
<a4j:keepAlive beanName="seuBean" />
Pode colocar até fora do form sem problemas.
Ele vai manter o estado do seu bean.
Continue usando o a4j:commandButton e o f:setPropertyActionListener
Espero ter ajudado
Att Davi
<a4j:keepAlive beanName="seuBean" />
Pode colocar até fora do form sem problemas.
Ele vai manter o estado do seu bean.
Continue usando o a4j:commandButton e o f:setPropertyActionListener
Espero ter ajudado
Att Davi
GOSTEI 0
Barcelos.java
18/04/2011
Desculpe mas não mencionei, é que estou usando o KeepAlive no inicio da página, está fora do form, mas ele funciona para outros submits na página, só para esse em especial é que não está funcionando...
GOSTEI 0
Davi Costa
18/04/2011
Hm sakei,
pois cara posta o código para a gente ver.
Att Davi
pois cara posta o código para a gente ver.
Att Davi
GOSTEI 0
Barcelos.java
18/04/2011
<!-- ########### AQUI NO INICIO DA PÁGINA MOSTRANDO O KEEPALIVE ################## -->
<h:form id="formConsultaRecebimento">
<a4j:keepAlive beanName="recebimentoForm"></a4j:keepAlive>
<!-- ########### MAIS AO FIM DA PÁGINA TENHO ESSE RICH TABLE ################## -->
<rich:dataTable
onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
rendered="#{recebimentoForm.visualiza == '3'}"
onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
id="ItensAreceber"
value="#{recebimentoForm.afitens}"
var="item"
rows="10"
style="width:100%;"
rowKeyVar="linha">
<f:facet name="header">
<rich:columnGroup>
<h:column><h:outputText value="Nº Item" /></h:column>
<h:column><h:outputText value="Descrição do Item" /></h:column>
<h:column><h:outputText value="Qtd Solic" /></h:column>
<h:column><h:outputText value="Vlr Unit" /></h:column>
<h:column><h:outputText value="Saldo" /></h:column>
<h:column><h:outputText value="Lote (Farmácia)" /></h:column>
<h:column><h:outputText value="Validade (Farmácia)" /></h:column>
<h:column><h:outputText value="Qtd Receb" /></h:column>
<h:column><h:outputText value="Total" /></h:column>
<h:column><h:outputText value="IPI" /></h:column>
<h:column><h:outputText value="Descontos" /></h:column>
<h:column><h:outputText value="Sub Total" /></h:column>
<h:column><h:outputText value="De Acordo com AF?" /></h:column>
<h:column><h:outputText value="Gravar" /></h:column>
</rich:columnGroup>
</f:facet>
<!-- Nº Item -->
<rich:column sortBy="#{item.afItem.numItem}" style="#{(recebimentoForm.mostra)?'color:black':'color:gray'}">
<center>
<h:outputText value="#{item.afItem.numItem}" />
<h:inputHidden value="#{item.afItem.isnAfItem}" />
</center>
</rich:column>
<!-- DESCRIÇÃO -->
<rich:column sortBy="#{item.afItem.dscProduto}" style="#{(recebimentoForm.mostra)?'color:black':'color:gray'}">
<h:outputText value="#{item.afItem.dscProduto}" />
</rich:column>
<!-- QTD SOLICITADA -->
<rich:column sortBy="#{item.afItem.qtdItem}" style="#{(recebimentoForm.mostra)?'color:black':'color:gray'}">
<center>
<h:outputText value="#{item.afItem.qtdItem}" />
</center>
</rich:column>
<!-- VLR UNITARIO -->
<rich:column align="center" sortBy="#{item.afItem.vlrItem}" style="#{(recebimentoForm.mostra)?'color:black':'color:gray'}">
<h:outputText value="#{item.afItem.vlrItem}" >
<f:converter converterId="br.org.isgh.syshosplib.converters.DoubleConverter"/>
</h:outputText>
</rich:column>
<!-- SALDO -->
<rich:column style="#{(recebimentoForm.mostra)?'color:black':'color:gray'}">
<center>
<h:outputText id="saldoProduto" value="#{item.afItem.qtdSaldo}" />
</center>
</rich:column>
<!-- LOTE -->
<rich:column>
<center>
<rich:inplaceInput
layout="block"
value="#{item.afItem.dscLote}"
id="inplaceDscLote"
changedHoverClass="hover"
viewHoverClass="hover"
viewClass="inplace"
changedClass="inplace"
selectOnEdit="true"
editEvent="onclick"
showControls="false"
onviewactivation="old = event.memo.oldValue;">
</rich:inplaceInput>
<h:outputText id="outLote" rendered="#{recebimentoForm.mostra}" value="#{item.recebimentoItem.dscLote}" />
</center>
</rich:column>
<!-- VALIDADE -->
<rich:column>
<center>
<a4j:outputPanel
title="Data de Validade"
rendered="#{recebimentoForm.mostra}"
id="calendarValidade"
layout="block">
<rich:calendar
id="calenderValidade"
inputSize="10"
datePattern="dd/MM/yyyy"
rendered="#{recebimentoForm.restrict}"
cellWidth="24px"
cellHeight="22px"
style="width:200px"
value="#{item.afItem.datValidade}"/>
</a4j:outputPanel>
</center>
</rich:column>
<!-- QTD RECEBIMENTO -->
<rich:column width="5%" style="#{(recebimentoForm.mostra)?'color:black':'color:gray'}">
<center>
<rich:inplaceInput
layout="block"
value="#{item.afItem.qtdRecebida}"
id="inplaceQtdRecebida"
changedHoverClass="hover"
viewHoverClass="hover"
viewClass="inplace"
changedClass="inplace"
selectOnEdit="true"
editEvent="onclick"
showControls="false"
onviewactivation="old = event.memo.oldValue;">
</rich:inplaceInput>
</center>
</rich:column>
<!-- VLR TOTAL -->
<rich:column style="background-color: #ECF4FE;font-weight:bold;" >
<center>
<h:outputLabel value="R$ " />
<h:outputText id="total" value="#{item.afItem.total}" >
<f:converter converterId="br.org.isgh.syshosplib.converters.DoubleConverter"/>
</h:outputText>
</center>
</rich:column>
<!-- IPI - SOB DEMANDA DO SISTEMA DE ALMOXARIFADO DO SYSHOSP -->
<rich:column width="10%" style="#{(recebimentoForm.mostra)?'color:black':'color:gray'}">
<div align="right">
<rich:inplaceInput
layout="block"
value="#{item.afItem.vlrIpi}"
id="inplaceVlrIpi"
changedHoverClass="hover"
viewHoverClass="hover"
viewClass="inplace"
changedClass="inplace"
selectOnEdit="true"
editEvent="onclick"
showControls="false"
onviewactivation="old = event.memo.oldValue;">
</rich:inplaceInput>
<h:outputText value="#{item.recebimentoItem.vlrIpi}" rendered="#{not recebimentoForm.mostra}"></h:outputText>
</div>
</rich:column>
<!-- DESCONTOS - SOB DEMANDA DO SISTEMA DE ALMOXARIFADO DO SYSHOSP -->
<rich:column width="10%" style="#{(recebimentoForm.mostra)?'color:black':'color:gray'}">
<div align="right">
<rich:inplaceInput
layout="block"
value="#{item.afItem.vlrDesconto}"
id="inplaceVlrDesconto"
changedHoverClass="hover"
viewHoverClass="hover"
viewClass="inplace"
changedClass="inplace"
selectOnEdit="true"
editEvent="onclick"
showControls="false"
onviewactivation="old = event.memo.oldValue;">
</rich:inplaceInput>
<h:outputText value="#{item.recebimentoItem.vlrDesconto}" rendered="#{not recebimentoForm.mostra}"></h:outputText>
</div>
</rich:column>
<!-- VLR SUBTOTAL -->
<rich:column align="center" style="background-color: #ECF4FE;font-weight:bold;">
<h:outputLabel value="R$ " />
<h:outputText id="subTotal" value="#{item.afItem.subTotal}" >
<f:converter converterId="br.org.isgh.syshosplib.converters.DoubleConverter"/>
</h:outputText>
</rich:column>
<!-- DE ACORDO COM AF? -->
<rich:column width="5%">
<center>
<h:selectBooleanCheckbox
id="ckboxRecebDeAcordoAF"
label="Situação Recebimento"
title="Caso haja divergência com AF DESmarque esta opção"
value="#{recebimentoForm.situacaoDocumento}" >
</h:selectBooleanCheckbox>
</center>
</rich:column>
<!-- GRAVAR -->
<rich:column width="5%" align="center" style="background-color: #ECF4FE;font-weight:bold;">
<a4j:commandButton
id="cmdlGravarRecebimentoItem"
image="IMG/salvar.png"
immediate="true"
rendered="#{recebimentoForm.mostra}"
action="#{recebimentoForm.gravarRecebimentoItem}">
<f:setPropertyActionListener value="#" target="#{recebimentoForm.recebimentoAfItem}"/>
<f:setPropertyActionListener value="#{item.afItem.numItem}" target="#{recebimentoForm.numItem}"/>
<f:setPropertyActionListener value="#{item.afItem}" target="#{recebimentoForm.afItem}"/>
<a4j:support
event="oncomplete"
reRender="panelDataTable,ItensAreceber"
onsubmit="if (event.memo.value == old) return false;">
</a4j:support>
</a4j:commandButton>
<h:outputText id="outGravarRecebimento" value="" rendered="#{not recebimentoForm.mostra}"></h:outputText>
</rich:column>
</rich:dataTable>
<h:form id="formConsultaRecebimento">
<a4j:keepAlive beanName="recebimentoForm"></a4j:keepAlive>
<!-- ########### MAIS AO FIM DA PÁGINA TENHO ESSE RICH TABLE ################## -->
<rich:dataTable
onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
rendered="#{recebimentoForm.visualiza == '3'}"
onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
id="ItensAreceber"
value="#{recebimentoForm.afitens}"
var="item"
rows="10"
style="width:100%;"
rowKeyVar="linha">
<f:facet name="header">
<rich:columnGroup>
<h:column><h:outputText value="Nº Item" /></h:column>
<h:column><h:outputText value="Descrição do Item" /></h:column>
<h:column><h:outputText value="Qtd Solic" /></h:column>
<h:column><h:outputText value="Vlr Unit" /></h:column>
<h:column><h:outputText value="Saldo" /></h:column>
<h:column><h:outputText value="Lote (Farmácia)" /></h:column>
<h:column><h:outputText value="Validade (Farmácia)" /></h:column>
<h:column><h:outputText value="Qtd Receb" /></h:column>
<h:column><h:outputText value="Total" /></h:column>
<h:column><h:outputText value="IPI" /></h:column>
<h:column><h:outputText value="Descontos" /></h:column>
<h:column><h:outputText value="Sub Total" /></h:column>
<h:column><h:outputText value="De Acordo com AF?" /></h:column>
<h:column><h:outputText value="Gravar" /></h:column>
</rich:columnGroup>
</f:facet>
<!-- Nº Item -->
<rich:column sortBy="#{item.afItem.numItem}" style="#{(recebimentoForm.mostra)?'color:black':'color:gray'}">
<center>
<h:outputText value="#{item.afItem.numItem}" />
<h:inputHidden value="#{item.afItem.isnAfItem}" />
</center>
</rich:column>
<!-- DESCRIÇÃO -->
<rich:column sortBy="#{item.afItem.dscProduto}" style="#{(recebimentoForm.mostra)?'color:black':'color:gray'}">
<h:outputText value="#{item.afItem.dscProduto}" />
</rich:column>
<!-- QTD SOLICITADA -->
<rich:column sortBy="#{item.afItem.qtdItem}" style="#{(recebimentoForm.mostra)?'color:black':'color:gray'}">
<center>
<h:outputText value="#{item.afItem.qtdItem}" />
</center>
</rich:column>
<!-- VLR UNITARIO -->
<rich:column align="center" sortBy="#{item.afItem.vlrItem}" style="#{(recebimentoForm.mostra)?'color:black':'color:gray'}">
<h:outputText value="#{item.afItem.vlrItem}" >
<f:converter converterId="br.org.isgh.syshosplib.converters.DoubleConverter"/>
</h:outputText>
</rich:column>
<!-- SALDO -->
<rich:column style="#{(recebimentoForm.mostra)?'color:black':'color:gray'}">
<center>
<h:outputText id="saldoProduto" value="#{item.afItem.qtdSaldo}" />
</center>
</rich:column>
<!-- LOTE -->
<rich:column>
<center>
<rich:inplaceInput
layout="block"
value="#{item.afItem.dscLote}"
id="inplaceDscLote"
changedHoverClass="hover"
viewHoverClass="hover"
viewClass="inplace"
changedClass="inplace"
selectOnEdit="true"
editEvent="onclick"
showControls="false"
onviewactivation="old = event.memo.oldValue;">
</rich:inplaceInput>
<h:outputText id="outLote" rendered="#{recebimentoForm.mostra}" value="#{item.recebimentoItem.dscLote}" />
</center>
</rich:column>
<!-- VALIDADE -->
<rich:column>
<center>
<a4j:outputPanel
title="Data de Validade"
rendered="#{recebimentoForm.mostra}"
id="calendarValidade"
layout="block">
<rich:calendar
id="calenderValidade"
inputSize="10"
datePattern="dd/MM/yyyy"
rendered="#{recebimentoForm.restrict}"
cellWidth="24px"
cellHeight="22px"
style="width:200px"
value="#{item.afItem.datValidade}"/>
</a4j:outputPanel>
</center>
</rich:column>
<!-- QTD RECEBIMENTO -->
<rich:column width="5%" style="#{(recebimentoForm.mostra)?'color:black':'color:gray'}">
<center>
<rich:inplaceInput
layout="block"
value="#{item.afItem.qtdRecebida}"
id="inplaceQtdRecebida"
changedHoverClass="hover"
viewHoverClass="hover"
viewClass="inplace"
changedClass="inplace"
selectOnEdit="true"
editEvent="onclick"
showControls="false"
onviewactivation="old = event.memo.oldValue;">
</rich:inplaceInput>
</center>
</rich:column>
<!-- VLR TOTAL -->
<rich:column style="background-color: #ECF4FE;font-weight:bold;" >
<center>
<h:outputLabel value="R$ " />
<h:outputText id="total" value="#{item.afItem.total}" >
<f:converter converterId="br.org.isgh.syshosplib.converters.DoubleConverter"/>
</h:outputText>
</center>
</rich:column>
<!-- IPI - SOB DEMANDA DO SISTEMA DE ALMOXARIFADO DO SYSHOSP -->
<rich:column width="10%" style="#{(recebimentoForm.mostra)?'color:black':'color:gray'}">
<div align="right">
<rich:inplaceInput
layout="block"
value="#{item.afItem.vlrIpi}"
id="inplaceVlrIpi"
changedHoverClass="hover"
viewHoverClass="hover"
viewClass="inplace"
changedClass="inplace"
selectOnEdit="true"
editEvent="onclick"
showControls="false"
onviewactivation="old = event.memo.oldValue;">
</rich:inplaceInput>
<h:outputText value="#{item.recebimentoItem.vlrIpi}" rendered="#{not recebimentoForm.mostra}"></h:outputText>
</div>
</rich:column>
<!-- DESCONTOS - SOB DEMANDA DO SISTEMA DE ALMOXARIFADO DO SYSHOSP -->
<rich:column width="10%" style="#{(recebimentoForm.mostra)?'color:black':'color:gray'}">
<div align="right">
<rich:inplaceInput
layout="block"
value="#{item.afItem.vlrDesconto}"
id="inplaceVlrDesconto"
changedHoverClass="hover"
viewHoverClass="hover"
viewClass="inplace"
changedClass="inplace"
selectOnEdit="true"
editEvent="onclick"
showControls="false"
onviewactivation="old = event.memo.oldValue;">
</rich:inplaceInput>
<h:outputText value="#{item.recebimentoItem.vlrDesconto}" rendered="#{not recebimentoForm.mostra}"></h:outputText>
</div>
</rich:column>
<!-- VLR SUBTOTAL -->
<rich:column align="center" style="background-color: #ECF4FE;font-weight:bold;">
<h:outputLabel value="R$ " />
<h:outputText id="subTotal" value="#{item.afItem.subTotal}" >
<f:converter converterId="br.org.isgh.syshosplib.converters.DoubleConverter"/>
</h:outputText>
</rich:column>
<!-- DE ACORDO COM AF? -->
<rich:column width="5%">
<center>
<h:selectBooleanCheckbox
id="ckboxRecebDeAcordoAF"
label="Situação Recebimento"
title="Caso haja divergência com AF DESmarque esta opção"
value="#{recebimentoForm.situacaoDocumento}" >
</h:selectBooleanCheckbox>
</center>
</rich:column>
<!-- GRAVAR -->
<rich:column width="5%" align="center" style="background-color: #ECF4FE;font-weight:bold;">
<a4j:commandButton
id="cmdlGravarRecebimentoItem"
image="IMG/salvar.png"
immediate="true"
rendered="#{recebimentoForm.mostra}"
action="#{recebimentoForm.gravarRecebimentoItem}">
<f:setPropertyActionListener value="#" target="#{recebimentoForm.recebimentoAfItem}"/>
<f:setPropertyActionListener value="#{item.afItem.numItem}" target="#{recebimentoForm.numItem}"/>
<f:setPropertyActionListener value="#{item.afItem}" target="#{recebimentoForm.afItem}"/>
<a4j:support
event="oncomplete"
reRender="panelDataTable,ItensAreceber"
onsubmit="if (event.memo.value == old) return false;">
</a4j:support>
</a4j:commandButton>
<h:outputText id="outGravarRecebimento" value="" rendered="#{not recebimentoForm.mostra}"></h:outputText>
</rich:column>
</rich:dataTable>
GOSTEI 0
Davi Costa
18/04/2011
Altera o immediate por ajaxSingle="true".
Tira o <a4j:keepAlive /> do form, pode colocolocar uma linha acima.
Mais uma dica o próprio <a4j:commandButton/> possui reRender, não é necessário criar um <a4j:support/>
só para dar um reRenderse vcquer colocar um if dentro de reRender pode tranquilamente. Por exemplo:
reRender="#{seuBean.suaCondicao?'elementId':'anotherElemntId'}
Não está errado o que vc fez, só quiz passar a dica mesmo.
Testa aí e passa o feedBack
Att Davi
Tira o <a4j:keepAlive /> do form, pode colocolocar uma linha acima.
Mais uma dica o próprio <a4j:commandButton/> possui reRender, não é necessário criar um <a4j:support/>
só para dar um reRenderse vcquer colocar um if dentro de reRender pode tranquilamente. Por exemplo:
reRender="#{seuBean.suaCondicao?'elementId':'anotherElemntId'}
Não está errado o que vc fez, só quiz passar a dica mesmo.
Testa aí e passa o feedBack
Att Davi
GOSTEI 0
Barcelos.java
18/04/2011
Cara, tentei do jeito que você disse, mas não adiantou. Eu vou tentar refazer a página e mais tarde dou um feedback. obrigado pela ajuda, valeu mesmo.
GOSTEI 0
Davi Costa
18/04/2011
Blza, vou ficar no aguardo, faz só mais um teste trocando button por link.
Att Davi
Att Davi
GOSTEI 0
Barcelos.java
18/04/2011
não consegui, até agora tentei todas as formas, mas sem sucesso. agradeço qualquer ajuda que me for dada.
GOSTEI 0
Dyego Carmo
18/04/2011
Qual o escopo do seu bean? tentou suar escopo de sessão ?
GOSTEI 0
Barcelos.java
18/04/2011
Galera, consegui resolver, o problema era um "immediate" do botão gravar, que eu não sei a que cargas d'agua eu coloquei no botão, retirei e os valores forma passados direitinho. Obrigado pela ajuda.
GOSTEI 0