Oi pessoal,
Estou com um problema com os componentes do richfaces:
Tenho uma tela de edição de dados onde tenho uma combo (rich:comboBox)
e uma tabela (rich:dataTable). O que está acontecendo é que quando eu
edito os dados da tabela e mudo o valor da combobox e clico em um
botão salvar o managed bean não é atualizado com os valores da tabela,
mas a combo é atualizada! Já se edito somente a tabela e clico no
botão salvar os valores da tabela estão lá.
Alguém já passou por esse problema?
Estou usando um Managed Bean com escopo de request e um a4j:keepAlive
na página.
Estou usando o Rich 3.2.1 e JSF 1. RI
Vou colocar o codigo aqui:
Minha página:
<f:view>
<h:form id="manterInventarioForm">
<a4j:commandButton value="#{mensagens.btnSalvar}" id="btnSalvar"
title="#{mensagens.ttpMiSalvar}" styleClass="txtformat geralhover"
action="#{mBeanManterInventario.salvar}" />
<h:messages />
<h:panelGrid columns="1">
<h:outputLabel value="#{mensagens.lblMiStatus}:" for="status"
styleClass="txtformat" />
<!-- O combo do status estará desabilitado caso seja um novo
inventário ou então um inventário
que já esteja fechado -->
<rich:comboBox
value="#{mBeanManterInventario.inventario.fechado}"
defaultLabel="#{mBeanManterInventario.inventario.fechado}"
suggestionValues="#{mBeanManterInventario.statusItens}"
id="status" converter="StatusConverter"
styleClass="txtformat" inputClass="txtformat">
</rich:comboBox>
</h:panelGrid>
<a4j:keepAlive beanName="mBeanManterInventario" />
<rich:dataTable id="tbInventario"
value="#{mBeanManterInventario.itensDoInventario}"
var="inventario"
headerClass="tableheader" cellspacing="0" width="100%"
rowClasses="geralhover tablecol"
columnClasses=",txtaocentro,txtaocentro,txtaocentro,txtadireita,txtadireita">
<f:facet name="header">
<rich:columnGroup>
<rich:column>
<h:outputText value="#{mensagens.lblMiCodigoInterno}" />
</rich:column>
<rich:column colspan="3">
<h:outputText value="#{mensagens.lblMiQuantFisico}" />
</rich:column>
<rich:column>
<h:outputText value="#{mensagens.lblMiAcuracia}" />
</rich:column>
<rich:column breakBefore="true"/>
<rich:column>
<h:outputText value="#{mensagens.lblMiPrimeiro}" />
</rich:column>
<rich:column>
<h:outputText value="#{mensagens.lblMiSegundo}" />
</rich:column>
<rich:column>
<h:outputText value="#{mensagens.lblMiTerceiro}" />
</rich:column>
<rich:column />
</rich:columnGroup>
</f:facet>
<h:column>
<h:outputText value="#{inventario.sparePart.codigoInterno}" />
</h:column>
<h:column>
<h:inputText value="#{inventario.quantidadeFisica1}" size="3"
styleClass="txtformart" id="qtde1" immediate="true"
rendered="#{not mBeanManterInventario.inventario.fechado}" />
<h:outputText value="#{inventario.quantidadeFisica1}"
styleClass="txtformart"
rendered="#{mBeanManterInventario.inventario.fechado}" />
</h:column>
<h:column>
<h:inputText value="#{inventario.quantidadeFisica2}" size="3"
styleClass="txtformart" id="qtde2" immediate="true"
rendered="#{not mBeanManterInventario.inventario.fechado}" />
<h:outputText value="#{inventario.quantidadeFisica2}"
styleClass="txtformart"
rendered="#{mBeanManterInventario.inventario.fechado}" />
</h:column>
<h:column>
<h:inputText value="#{inventario.quantidadeFisica3}" size="3"
styleClass="txtformart" id="qtde3" immediate="true"
rendered="#{not mBeanManterInventario.inventario.fechado}" />
<h:outputText value="#{inventario.quantidadeFisica1}"
styleClass="txtformart"
rendered="#{mBeanManterInventario.inventario.fechado}" />
</h:column>
<h:column>
<h:inputHidden
value="#{inventario.sparePart.quantidadeEmEstoque}"
id="qtdeEstoque" />
</h:column>
</rich:dataTable>
</h:form>
</f:view>
Meu Managed Bean:
public class MBeanInventario {
private ManterEstoqueLocal manterInventario = ;
private InventarioDetalheTO inventario;
@PostConstruct
private void carregaInventario() {
// Procura por um possível parametro de request chamado id
String id = FacesContext.getCurrentInstance().getExternalContext()
.getRequestParameterMap().get("id");
// Carrega-se o inventário detalhado que será editado
InventarioDetalheTO inventarioDoBD = manterInventarioDelegate
.getInventarioById(new Integer(id));
this.inventario = inventarioDoBD;
}
public InventarioDetalheTO getInventario() {
return inventario;
}
public List<ItemInventarioListaTO> getItensDoInventario() {
return this.inventario.getItensInventario();
}
public String salvar() {
ManterInventarioDelegate delegate = new ManterInventarioDelegate(
manterInventario);
System.out.println("---- salvando ----");
for (ItemInventarioListaTO item : inventario.getItensInventario()) {
System.out.println(item.getSparePart().getCodigoInterno() + "/"
+ item.getQuantidadeFisica1() + "/"
+ item.getQuantidadeFisica2() + "/"
+ item.getQuantidadeFisica3());
}
System.out.println("---- fim salvando ----");
System.out.println("Cat: " + inventario.getCategoria());
System.out.println("Data: " + inventario.getData());
System.out.println("Status: " + inventario.isFechado());
delegate.salvarInventario(inventario);
return "salvar";
}
public List<String> getStatusItens() {
LinkedList<String> linkedList = new LinkedList<String>();
linkedList.add("Aberto");
linkedList.add("Fechado");
return linkedList;
}
}
Obrigado pela atenção.