Estou a desenvolver um projecto web-based na minha universidade e encontrei um problema que me está a impedir de avançar com o processo.
A ideia é ter um form e este form ter um selectOneMenu que vai receber os seus items dinamicamente consoante uma lista de objectos do tipo SelectItem fornecida pelo backing bean.
De seguida tenho os inputText “Titulo”, “Data” e “Informação”, que dizem respeito a cada registo da base de dados anteriormente listado no selectOneMenu. Até aqui tudo bem.
O problema: ainda não consegui arranjar maneira de preencher as inputText, uma vez que não consigo aceder aos campos do objecto actualmente listado na selectOneMenu.
Já li muita coisa mas nada que resolvesse este problema.
Só trabalho com JSF/JSP há cerca de uma semana por isso peço desculpa se estiver a perguntar algo demasiado óbvio.
vc carrega do banco através de um método que retorne uma List e popula o seu selectOneMenu…cada SelectItem tem um Label(nome que aparece na tela) e um value(usado pra vc ter o valor de cada item)…
vc liga o selectItem a um metodo que recebe um evento, a cada mudança nele o método verifica qual o value selecionado e ai manda setar nos seus inputText o valor que deseja…
vc deve ter ligado seu inputText com um binding ou diretamente na propriedade do baking bean através do value…
agora não entendi o seguinte, vc está conseguindo popular o selectOneMenu mas não consegue atualizar os inputTex…
ou ainda não conseguiu carregar os valores do SelectOneMenu…
A minha dropdown (selectOneMenu) está a funcionar. Já lista os valores, mas quando eu escolho um deles as inputText não alteram para a propriedade correspondente ao item seleccionado. Aqui está o codigo do form em questão:
Neste momento está um pouco confuso, estive a fazer alterações e não ficou como estava anteriormente e por isso é possivel que já esteja a funcionar como estava antes.
De qualquer das formas a ideia é ir buscar aqui…
… segundo o item seleccionado, os valores para as inputText com o id “data”, “estado” e descricao". Ou seja, saber qual a noticia que tem aquele titulo seleccionado para sacar da BD os atributos desse registo e inseri-los nas inputText.
Não tenho ainda nenhum mecanismo que o faça e não tenho ideia de como o fazer :?
cara como estás iniciando não deixe sempre de ver a documentação e ler alguns livros…indico o Core Java Server Faces… mas é bom ter uma base servlet/jsp…
vou te ajudar no seu problema:
(pode ter alguns erros abaixo de fechamento…sei lá…qualquer coisa…estou fazendo de cabeça sem testar o código ok…)
imaginemos seu formulário:
<a4j:form id="formQQ">
<h:outputLabel value="Titulo: "/>
<h:selectOneMenu id="Titulo" value="titulo"> // value="titulo" vc guarda a opção que foi selecionada no Select
<f:selectItems value="#{UserBean.titulo}"/> // aqui será de onde vai vir teus itens
<a4j:support event="onchange" action="#{UserBean.Mudar}"/> // tag do ajax4JSF para enviar um evento para o metodo Mudar
</h:selectOneMenu>
<a4j:outputPanel> //esta tag faz com que seja atualizado apenas os campos abaixo quando vc mudar item selecionado
<h:outputLabel value="Data: "/>
<h:outpuText value="#{UserBean.data}"/>
<h:outputLabel value="Informação: "/>
<h:outpuText value="#{UserBean.informacao}"/>
<h:outputLabel value="Descrição: "/>
<h:outpuText value="#{UserBean.descricao}"/>
</a4j:outputPanel>
</a4j:form>
este seria seu bean dos valores que vc fez um value="#{UserBean.xxx}"
aqui estão propriedades e métodos juntos, claro só pra vc entender a idéia…depois separe os métodos das propriedades…
vc declara este bean la no seu faces-config
public class UserBean{
private String data; // vc vai usar um Calendar provavelmente
private String informacao;
private String descricao;
private Integer TituloSelecionado = 0; // propriedade guardará o valor selecionado - Integer pq o value do SelectItem recebe Object, por isso não é um int ok...
private List<SelectItem> titulos;
public UserBean(){}
//gerar getters e setters
//Aqui um exemplo pra popular seu SelectOneMenu, vc vai carregar do banco, aqui está fixo
public List<SelectItem> getTitulos(){
titulos = new ArrayList<SelectItem>();
titulos.add(new SelectItem(1,"noticia 1"));
titulos.add(new SelectItem(2,"noticia 2"));
titulos.add(new SelectItem(3,"noticia 3"));
titulos.add(new SelectItem(4,"noticia 4"));
return titulos;
}
// get e set da propriedade que guarda o valor selecionado
public Integer getTituloSelecionado() {
return TituloSelecionado;
}
public void setTituloSelecionado(Integer TituloSelecionado) {
this.TituloSelecionado = TituloSelecionado;
}
// aqui o método que vai responder o evento de mudança...tem outras formas de fazer..
public String Mudar(){
// vc deve fazer isso aqui dinâmico, pois vc não sabe quantos resultados do banco terá o seu SelectOneMenu...entenda a idéia....
if(getTituloSelecionado == 1) {
thios.data = "01/01/01"
this.informacao = "Noticia urgente";
this.descricao = "Esta noticia saiu em primeira mao...";
} else if(getTituloSelecionado == 2)
etc etc etc
}
}
cara mais explicado que isso…
entenda a idéia de como se faz ok…isso deve funcionar…porém vc pode melhorar e muito isso ai…
flw Hewerton
Vou passar a tua sugestão ao grupo de trabalho e ver o que eles acham. Era óptimo que conseguissemos adaptar a tua solução sem usar as tags ajax, não tenho a certeza se podemos usar isso no projecto dado que não está presente nas especificações técnicas que foram aprovadas.
Obrigado mais uma vez.
EDIT: Infelizmente a nossa implementação não aceita as tags a4j, nem sequer o import está a resultar…
[quote=Catalina]Obrigado pelo tempo dispendido. Foste impecável.
EDIT: Infelizmente a nossa implementação não aceita as tags a4j, nem sequer o import está a resultar… [/quote]
disponha…
só uma sugestão…se vc usar jsf…seria muito importante e útil a utilização do ajax4JSF…vai granhar produtividade com o uso deste recurso…e de fácil utilização…
O.k. tudo bem, não tenho nada a ver com o assunto, mas tenho o mesmo problema, quero saber como faze isso usando “JSF Puro” sem a4j, já que na versão do rich que estou usando não tem essa bendita tag.
Podem ajudar?
por favor !!! sei que o post é antigo, mas já procurei (durante um mês e não achei nada no google), estou tentando uma coisa simples mas não consigo fazer funcionar !!! Por favor se alguém pode me ajudar???
aqui esta o que tenho, estou com muita dificuldade me ajudem !!!
@ManagedBean(name="arquivoBean")
@ViewScoped
public class ArquivoBean {
Arquivo arquivo = new Arquivo();
List<Arquivo> arquivos = new ArrayList<Arquivo>();
public ArquivoBean(){
arquivos = new ArquivoDao().listar();
arquivo = new Arquivo();
}
public void cadastrar(ActionEvent actionEvent){
new ArquivoDao().inserir(arquivo);
arquivos = new ArquivoDao().listar();
arquivo = new Arquivo();
}
public void alterar(ActionEvent actionEvent){
new ArquivoDao().alterar(arquivo);
arquivos = new ArquivoDao().listar();
arquivo = new Arquivo();
}
public void excluir(ActionEvent actionEvent){
new ArquivoDao().excluir(arquivo);
arquivos = new ArquivoDao().listar();
arquivo = new Arquivo();
}
public Arquivo getArquivo() {
return arquivo;
}
public void setArquivo(Arquivo arquivo) {
this.arquivo = arquivo;
}
@SuppressWarnings("rawtypes")
public List getArquivos() {
return arquivos;
}
@SuppressWarnings("unchecked")
public void setArquivos(@SuppressWarnings("rawtypes") List arquivos) {
this.arquivos = arquivos;
}
}
quero atualizar a descrição e não consigo !!!
aguem por favor !!!
[quote=franci]por favor !!! sei que o post é antigo, mas já procurei (durante um mês e não achei nada no google), estou tentando uma coisa simples mas não consigo fazer funcionar !!! Por favor se alguém pode me ajudar???
aqui esta o que tenho, estou com muita dificuldade me ajudem !!!
@ManagedBean(name="arquivoBean")
@ViewScoped
public class ArquivoBean {
Arquivo arquivo = new Arquivo();
List<Arquivo> arquivos = new ArrayList<Arquivo>();
public ArquivoBean(){
arquivos = new ArquivoDao().listar();
arquivo = new Arquivo();
}
public void cadastrar(ActionEvent actionEvent){
new ArquivoDao().inserir(arquivo);
arquivos = new ArquivoDao().listar();
arquivo = new Arquivo();
}
public void alterar(ActionEvent actionEvent){
new ArquivoDao().alterar(arquivo);
arquivos = new ArquivoDao().listar();
arquivo = new Arquivo();
}
public void excluir(ActionEvent actionEvent){
new ArquivoDao().excluir(arquivo);
arquivos = new ArquivoDao().listar();
arquivo = new Arquivo();
}
public Arquivo getArquivo() {
return arquivo;
}
public void setArquivo(Arquivo arquivo) {
this.arquivo = arquivo;
}
@SuppressWarnings("rawtypes")
public List getArquivos() {
return arquivos;
}
@SuppressWarnings("unchecked")
public void setArquivos(@SuppressWarnings("rawtypes") List arquivos) {
this.arquivos = arquivos;
}
}
quero atualizar a descrição e não consigo !!!
aguem por favor !!!
[/quote]