CellEdit do datatable perde a edição

0 respostas
javafront-end
G

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;
	}	
}
Criado 8 de junho de 2016
Respostas 0
Participantes 1