ola pessoal,
Estou com um problema chato que não consigo resolver. Criei um datatable com cellEditor dentro de uma tab e, dentro dessa tab, eu coloquei um ajax que muda a lista do datatable toda vez que muda para outra tab. O problema é que, quando eu clico em outra tab e carrega o outro datatable eu perco a edição das células e só aparece o output da célula. Gostaria de uma ajuda pra saber o que está acontecendo e como resolver:
xhtml
<p:tabView value="#{cadastroContasBean.listaTabela}" dynamic="true"
closeable="true" activeIndex="#{cadastroContasBean.idTabela}"
var="tabela" style="heigth:100%;width:100%" id="tabView">
<p:tab title="tab" closable="true" id="tab">
<div>
<p:dataTable binding="#{cadastroContasBean.dataTable}" var="gasto"
value="#{cadastroContasBean.listaGasto}" scrollable="true"
scrollHeight="150" editable="true" editMode="cell" id="Tabela"
widgetVar="wTabela">
<p:column headerText="Nome">
<p:cellEditor>
<f:facet name="output">
<p:outputLabel value="#{gasto.nome}" />
</f:facet>
<f:facet name="input">
<p:inputText id="inputTextNome" required="true"
value="#{cadastroContasBean.nome}" style="width:96%"
binding="#{cadastroContasBean.inputTextNome}">
<p:ajax event="change" update="Tabela"
listener="#{cadastroContasBean.atualizaVT('inputTextNome')}"
execute="inputTextNome" process="@this">
</p:ajax>
</p:inputText>
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Quantidade">
<p:cellEditor>
<f:facet name="output">
<p:outputLabel value="#{gasto.quantidade}" />
</f:facet>
<f:facet name="input">
<p:inputText id="inputQtd" required="true"
value="#{cadastroContasBean.qtd}" style="width:96%"
onkeydown="MascaraNumero()" onkeyup="MascaraNumero()"
binding="#{cadastroContasBean.inputTextQtd}">
<p:ajax event="change" update="Tabela"
listener="#{cadastroContasBean.atualizaVT('inputTextQtd')}"
execute="inputQtd" process="@this" />
</p:inputText>
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Valor">
<p:cellEditor>
<f:facet name="output">
<p:outputLabel value="#{gasto.valor}">
<f:convertNumber currencySymbol="R$" type="currency" />
</p:outputLabel>
</f:facet>
<f:facet name="input">
<p:inputText id="inputValor" required="true"
value="#{cadastroContasBean.valor}" style="width:96%"
binding="#{cadastroContasBean.inputTextValor}">
<f:convertNumber pattern="#,##0.00"></f:convertNumber>
<f:validator validatorId="MoedaValidator" />
<p:ajax event="change" update="Tabela"
listener="#{cadastroContasBean.atualizaVT('inputTextValor')}"
execute="inputValor" process="@this">
</p:ajax>
</p:inputText>
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Valor Total" id="vt">
<p:outputLabel id="outputVT" value="#{gasto.valorTotal}">
<f:convertNumber currencySymbol="R$" type="currency" />
</p:outputLabel>
</p:column>
</p:dataTable>
<div id="addGasto">
<p:commandButton value="Add gasto" style="width:100%"
actionListener="#{cadastroContasBean.addGasto}" update="Tabela"></p:commandButton>
</div>
</div>
<div>
<p:outputLabel value="Comentários: " for="comentario"></p:outputLabel>
<p:inputTextarea value="#{tabela.comentarios}" id="comentario"
autoResize="true" style="width: 100%; height: 50%"></p:inputTextarea>
</div>
</p:tab>
<p:ajax event="tabChange" execute="tab"
listener="#{cadastroContasBean.mudaTab}" process="@this" />
</p:tabView>
MB
public void mudaTab(TabChangeEvent event) {
tabelaAtual = (Tabela)event.getData();
idTabela =(tabelaAtual).getId();
listarGastos();
}
public void listarGastos(){
listaGasto = tabelaAtual.getListaGastos();
}
Tabela
public class Tabela {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String comentarios;
@OneToMany (mappedBy="tabela")
private List<Gastos> listaGastos = new ArrayList<Gastos>();
@ManyToOne
private MesAno mesano;
public List<Gastos> getListaGastos() {
return listaGastos;
}
public void setListaGastos(List<Gastos> listaGastos) {
this.listaGastos = listaGastos;
}
public MesAno getMesano() {
return mesano;
}
public void setMesano(MesAno mesano) {
this.mesano = mesano;
}
public String getComentarios() {
return comentarios;
}
public void setComentarios(String comentarios) {
this.comentarios = comentarios;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}