llucas
Fevereiro 8, 2011, 2:11pm
#1
Olá
Estou com um problema que pesquisei em alguns foruns e vi alguns exemplos que não consegui implementar
Estou usando JSF 2.0 - Tomcat - PrimeFaces
Estou fazendo um sistema de vendas onde tem um selectonemenu com as formas de pagamento que ao ser selecionada deve carregar o conteudo de outro selectonemenu com os parcelamentos possíveis.
Uma solução semelhante a isso é um menu com as UF de estados que as ser selecionada carrega as cidades em outro menu.
Tentei usar valueChangeListener sem nenhum sucesso
Se alguem ja fez algo semelhante e puder me mostrar o trecho do codigo que faz isso funcionar.
Bom,no RichFaces com JSF 1.2 seria mais ou menos isso:
<h:selectOneMenu id=“estado”>
<a4j:support event=“onchange” actionListener="#{controller.populaCidades}" reRender=“cidade”>
</h:selectOneMenu>
<h:selectOneMenu id=“cidade”>
</h:selectOneMenu>
No exemplo estado-cidade uso um converter. Veja se consegue adaptar o código
<h:outputLabel value="Estado"/>
<h:selectOneMenu value="#{bean.estado_selecionado}"
id="estado"
>
<f:selectItems value="#{bean.estados}"
var="estado"
itemLabel="#{estado.nome}"
itemValue="#{estado.codigo_estado}" />
<p:ajax listener="#{bean.refreshEstado}"
event="change" update="cidade" process="estado" />
</h:selectOneMenu>
<h:outputLabel value="Cidade"/>
<h:selectOneMenu id="cidade" value="#{bean.endereco.cidade}" converter="converteCidade">
<f:selectItems value="#{bean.cidades}"
var="cidade"
itemLabel="#{cidade.nome}"
itemValue="#{cidade}" />
</h:selectOneMenu>
[code]public void refreshEstado(){
loadCidades(estado_selecionado);
}[/code]
Fala Lucas, =)) eu tava fazendo algo parecido isso esses dias pow,
tenta algo como:
<h:selectOneMenu value="#{bean.objeto}">
<f:selectItems value="#{bean.valores}" var="item" itemLabel="#{item.descricao}" itemValue="#{item}"/>
<p:ajax event="change" listener="#{bean.mudanca}" process="@form" update="idSegundoMenu"/>
</h:selectOneMenu>
tem também o f:ajax que funciona de forma semelhante…
Abraços.
llucas
Fevereiro 8, 2011, 9:48pm
#5
Antes de pesquisar na internet eu tinha feito o segundo menu atualizar quando o valor do primeiro era alterado.
O Código parecido com o do gilvan mas com o f:ajax
O que eu não consegui foi pegar o valor do primeiro selectonemenu para poder pesquisar no banco os valores que serão inseridos no segundo selectonemenu
Pra poder saber quais cidades carregar eu preciso saber o estado que foi selecionado
llucas
Fevereiro 8, 2011, 11:03pm
#6
Consegui
o codigo ficou mais ou menos assim
Página JSF
<h:form id="formTeste">
<h:selectOneMenu value="#{vendaBean.formaPagamento}" >
<f:selectItems var="formaPagamento" itemLabel="#{formaPagamento.descricao}" itemValue="#{formaPagamento}" value="#{vendaBean.formaPagamentoList}" />
<p:ajax event="change" listener="#{vendaBean.parcelasAtualizar}" process="@form" update="formTeste" />
</h:selectOneMenu>
<h:selectOneMenu id="id1" >
<f:selectItems value="#{vendaBean.parcelaList}" />
</h:selectOneMenu>
</h:form>
Classe ManagedBean
ArrayList<Integer> a = new ArrayList<Integer>();
public ArrayList<Integer> getParcelaList() {
return a;
}
public void parcelasAtualizar() {
a = new ArrayList<Integer>();
//codigo pra carregar itens em a
}
Olha ae a solução, com o código completo, esse llucas estuda comigo, ele não serve não para ser professor, rsrs,
posta as coisas pela metade…
teste.xhtml
[code] <h:form id=“formulario”>
<h:selectOneMenu id=“cbxUm” value="#{testeBean.valor1}">
<f:selectItems value="#{testeBean.valoresPara1}" var=“item” itemLabel="#{item}" itemValue="#{item}"/>
<p:ajax event=“change” listener="#{testeBean.preenche2}" process="@form " update=“formulario”/>
</h:selectOneMenu>
<h:selectOneMenu id="cbxDois" value="#{testeBean.valor2}">
<f:selectItems value="#{testeBean.valoresPara2}" var="item2" itemLabel="#{item2}" itemValue="#{item2}"/>
</h:selectOneMenu>
</h:form>[/code]
testeBean.java
[code]package br.ufac.scrum.beans;
import java.util.ArrayList;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean
@RequestScoped
public class testeBean {
private String valor1;
private String valor2;
private ArrayList<String> valoresPara1;
private ArrayList<String> valoresPara2;
public String getValor1() {
return valor1;
}
public void setValor1(String valor1) {
this.valor1 = valor1;
}
public String getValor2() {
return valor2;
}
public void setValor2(String valor2) {
this.valor2 = valor2;
}
public ArrayList<String> getValoresPara1() {
valoresPara1 = new ArrayList<String>();
valoresPara1.add("Acre");
valoresPara1.add("Paraiba");
return valoresPara1;
}
public void setValoresPara1(ArrayList<String> valoresPara1) {
this.valoresPara1 = valoresPara1;
}
public ArrayList<String> getValoresPara2() {
return valoresPara2;
}
public void setValoresPara2(ArrayList<String> valoresPara2) {
this.valoresPara2 = valoresPara2;
}
public void preenche2() {
valoresPara2 = new ArrayList<String>();
if(valor1.equals("Acre")) {
valoresPara2.add("Rio Branco");
valoresPara2.add("Cruzeiro do Sul");
valoresPara2.add("Brasileia");
} else {
valoresPara2.add("João Pessoa");
valoresPara2.add("Campina Grande");
}
}
}[/code]