Boa tarde,
Estou procurando entender o funcionamento do <f:ajax ou <p:ajax no JSF, não estou obtendo muito sucesso em minhas pesquisas pra fazer o que eu quero,
só acho exemplos do tipo com comandoButton e fazer o valor aparecer na tela… enfim são exemplos simples. Oque quero fazer e tambem quero saber se é possivel fazer
é por ex: um dataTable e um comandButton no final de cada linha, esses valores eu gostaria de transferi-los pra um outro dataTable, tipo simular um carrinho de compras
com o ajax, mas pra isso preciso entender como funciona e se da pra fazer a transferencia do valor entre as tabelas, a a partir de qual momento precisarei usar o 'AjaxBehaviorEvent’
no meu manageBean pra fazer a requisição… bem acho que deu pra entender… exemplos, sites, links qualquer coisa…
Obrigado, Abraço
Vou ser mais objetivo…
Essa é minha ultima coluna do DataTable principal, no caso a “vitrine” onde mostra todos o produtos
<p:column>
<h:commandButton image="../ref/imgs/carrinho.png" title="Adicionar ao Carrinho">
<p:ajax event="click" update=":form:dtb" listener="#{vendaMB.addCarrinho}"/>
</h:commandButton>
</p:column>
O objetivo desse botão seria executar o metodo do MBean pra adicionar os dados da linha em outra DataTable, o id: ‘dtb’ do parametro update do <p:ajax/>
é o id da dataTable que estar recebendo essa lista Carrinho, só que obviamente ao clicar no botão é adicionado apenas uma linha em branco, minha duvida seria
como vou informa via ajax que é ‘aquela linha’(aquele produto) que quero adicionar na lista?
DataTable que esta recebendo a lista
<p:dataTable id="dtb" var="pdr" styleClass="datatable2" value="#{vendaMB.carrinho}">
<f:facet name="header">
Seu carrinho
</f:facet>
<p:column headerText="Produto">
<h:outputText value="#{pdr.nome}" />
</p:column>
<p:column headerText="Preço">
<h:outputText value="#{pdr.preco}" />
</p:column>
<p:column headerText="Quantidade">
</p:column>
<f:facet name="footer">
<p:commandButton value="Finalizar Compra">
</p:commandButton>
</f:facet>
</p:dataTable>
MBean
public class VendaMB {
private Produto produto;
private List<Produto> carrinho;
public VendaMB() {
super();
this.produto = new Produto();
this.carrinho = new ArrayList<Produto>();
}
public void addCarrinho(AjaxBehaviorEvent event){
this.carrinho.add(produto);
produto = new Produto();
}
[...]
Detalhe: se eu tiver me equivocado na ultilização de algum parametro ajax, não reparem pq ainda to entendendo o funcionamento do ajax na nativo jsf e do primeFaces…
Agradeço desde já, Abraço
Você pode fazer de 2 formas
assim:
public void addCarrinho(Produto produto){
this.carrinho.add(produto);
produto = new Produto();
}
Supondo que seu produto esteja vindo de um componente tipo datalist ou datatable
<p:commandLink title="Adicionar ao Carrinho" update=":form:dtb" action="#{vendaMB.addCarrinho(produto)}" >
<h:graphicImage src="../ref/imgs/carrinho.png"></h:graphicImage>
</p:commandLink>
ou assim:
public void addCarrinho(){
this.carrinho.add(produto);
produto = new Produto();
}
Supondo que seu produto esteja vindo de um componente tipo datalist ou datatable
<p:commandLink title="Adicionar ao Carrinho" update=":form:dtb" action="#{vendaMB.addCarrinho()}" >
<f:setPropertyActionListener target="#{vendaMB.produto}" value="#{produto}"> </f:setPropertyActionListener>
<h:graphicImage src="../ref/imgs/carrinho.png"></h:graphicImage>
</p:commandLink>
[quote=pauloph10]Você pode fazer de 2 formas
assim:
public void addCarrinho(Produto produto){
this.carrinho.add(produto);
produto = new Produto();
}
Supondo que seu produto esteja vindo de um componente tipo datalist ou datatable
<p:commandLink title="Adicionar ao Carrinho" update=":form:dtb" action="#{vendaMB.addCarrinho(produto)}" >
<h:graphicImage src="../ref/imgs/carrinho.png"></h:graphicImage>
</p:commandLink>
ou assim:
public void addCarrinho(){
this.carrinho.add(produto);
produto = new Produto();
}
Supondo que seu produto esteja vindo de um componente tipo datalist ou datatable
<p:commandLink title="Adicionar ao Carrinho" update=":form:dtb" action="#{vendaMB.addCarrinho()}" >
<f:setPropertyActionListener target="#{vendaMB.produto}" value="#{produto}"> </f:setPropertyActionListener>
<h:graphicImage src="../ref/imgs/carrinho.png"></h:graphicImage>
</p:commandLink>
[/quote]
Obrigado cara! funcionou certinho aqui. Pra ver como é né… sempre tentando faze da forma mais complicada e era só passa um parametro…
Mas ai vai uma ultima pergunta, eu sempre ouvi do ajax e da maravilha que ele é, onde ele seria necessario entrar? tipo eu ainda não consegui ver a ‘maravilha’ dele entende…
Agradeço mais uma vez pela atenção!