Ir para conteúdo

Guilherme do Vale

Members
  • Total de itens

    3
  • Registro em

  • Última visita

Reputação

0 Comum

Sobre Guilherme do Vale

  1. Guilherme do Vale

    CellEdit do datatable perde a edição

    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; } } Obs: não consigo identar o xhtml ¬¬
  2. Guilherme do Vale

    Não consigo pegar o valor do InputText depois que ele muda(JSF Primefa

    Consegui: criei um inputtext com getters e setters no managebean e fiz um bind com o inputttext do xhtml="true". Depois peguei o valor com "inputtext.getValue()" no método "atualizaVT()" chamado pelo event="change" do ajax.
  3. Oi pessoal! Eu estou tentando pegar um valor de um inputtext digitado dentro de um datatable column e atualizar um outputtext de outra column com a multiplicação desse valor e de outro inputtext. Meu problema é que eu não consigo pegar o valor digitado quando o ajax é chamado porque vem o valor anterior do campo que recebe o valor (gasto.valor), não o valor atual digitado. Meu código: XHTML <f:facet name="input"> <p:inputText id="inputValor" value="#{gasto.valor}" style="width:96%" onkeyup="mascara(this, valor)" onkeydown="mascara(this, valor)"> <f:convertNumber pattern="#,##0.00"></f:convertNumber> <f:validator validatorId="MoedaValidator" /> <p:ajax event="blur" render="outputVT" listener="#{cadastroContasBean.atualizaVT}" execute="inputValor" process="@this" immediate="true" > </p:ajax> </p:inputText> </f:facet> MB public void atualizaVT(AjaxBehaviorEvent event) { Gastos gastoDataTableAtual = ((Gastos)dataTable.getRowData()); if(!event.getComponent().getId().equals("inputQtd")){ BigDecimal valorAtual = (BigDecimal)((UIOutput)event.getSource()).getValue(); gastoDataTableAtual.setValorTotal(valorAtual.multiply(new BigDecimal(((Gastos)dataTable.getRowData()).getQuantidade()))); Iterator<Gastos> gastosAsIterator = listaGasto.iterator(); while (gastosAsIterator.hasNext()){ Gastos it = gastosAsIterator.next(); int id = 0; if(it.getId() == gastoDataTableAtual.getId()){ //listaGasto.get(id).setValor(gastoDataTableAtual.getValor()); listaGasto.get(id).setValorTotal(gastoDataTableAtual.getValorTotal()); ((Gastos)dataTable.getRowData()).setValorTotal(gastoDataTableAtual.getValorTotal()); break; } id++; } }else{ Integer valorAtual = (Integer)((UIOutput)event.getSource()).getValue(); gastoDataTableAtual.setValorTotal(((Gastos)dataTable.getRowData()).getValor().multiply(new BigDecimal(valorAtual))); Iterator<Gastos> gastosAsIterator = listaGasto.iterator(); int id = 0; while (gastosAsIterator.hasNext()){ Gastos it = gastosAsIterator.next(); if(it.getId() == gastoDataTableAtual.getId()){ //listaGasto.get(id).setQuantidade(gastoDataTableAtual.getQuantidade()); listaGasto.get(id).setValorTotal(gastoDataTableAtual.getValorTotal()); ((Gastos)dataTable.getRowData()).setValorTotal(gastoDataTableAtual.getValorTotal()); break; } id++; } Eu entendo que o evento "blur" do ajax é chamado antes de o "gasto.valor" ser mudado, mas quando eu mudo o evento do ajax pra "change" ou deixo sem event, o método não é chamado. Como eu pego esse valor?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.