Jsf - parâmetros

3 respostas
M

Olá,

Estou tentando fazem um cadastro para aprender um pouco de jsf e java. Li um pouco de java e o core javaserver faces e até aqui fui bem… mas agora parou!

O que tenho é um lista de cidades(que busco do banco de dados):
código descriçao
1 cidade_a
2 cidade_b

isso já está listando na página (conscidade.jsp) … agora qdo eu clicar em um código gostaria de mostrar os detalhes… só não sei como passar o código para o meu bean?

oque eu tenho:

conscidade.jsp:

CidadeBean.java:


como eu pego o parametro do código aqui!
public String altera(){

faces-config.xml

Gostaria de alguma dica para sair dessa!
Valeu
t+

3 Respostas

A

Eu já usei adf, não sei so DataTable funciona assim tb.
Quando eu clico no grid, eu chamo um action ou actionListener.
A minha tabela, tem um binding. Então atraves do binding da tabela, consigo na classe capturar o objeto da linha selecionada.

Com essa descricao… ve se consegue algo… Vou ver se descubro como funciona nos componentes básicos do JSF.

A

Lá vai entçao.
Tenho uma grid ( dataTable ) com o binding:

<t:dataTable var="row" value="#{usuario.usuarios}" binding="#{usuario.dataTable}">

no meu managed bean, criei um atributo dataTable do tipo HtmlDataTable vom os respectivos get e set:

private HtmlDataTable dataTable;

Na minha coluna dentro da dataTable, coloquei um commandLink que chama um actio que vai capturar os dados da linha selecionada.

<t:column width="50" title="Cód.">
    <f:facet name="header">
        <t:outputText value="Código"/>
    </f:facet>
    <t:commandLink action="#{usuario.selectRow}" immediate="true">
        <t:outputText value="#{row.codigo}"/>
    </t:commandLink>
</t:column>

Agora o meu action para capturar o objeto da linha selecionada:

public String selectRow() {
    Usuario usuarioSelecionado = (Usuario)dataTable.getRowData();
    System.out.println(usuarioSelecionado.getNome());
    return null;
}

o método getRowData(), retorna um Object, então não deve esquecer de fazer o cast para o tipo de objeto que você tem na sua coleção. No meu caso Usuario.
OBS: Eu usei os componentes Tomahawk, do myfaces, mas funciona pros outros tb.

Espero que te sirva… Abraço

M

Vamos lá...

primeiramente agradeço as dicas... mas implementei tudo conforme as mesmas e tá dando o seguinte erro:

javax.servlet.ServletException: #{cidade.altera}: javax.faces.el.EvaluationException: java.lang.ClassCastException: javax.faces.model.ResultSetDataModel$ResultSetMap
javax.faces.webapp.FacesServlet.service(FacesServlet.java:225)

não faço ném idéia do que pode ser isso...

o código ficou assim

.jsp
<h:dataTable value="#{cidade.todas}" var="cid" binding="#{cidade.datatable}">
<h:commandLink action="#{cidade.altera}">
                      <h:outputText value="#{cid.Codcidade}"/>
                    </h:commandLink>

se reparar no código acima falta immediate="true"... mas eu coloquei e o erro não muda

.java

private HtmlDataTable datatable;   
...
   public HtmlDataTable getDatatable() { return datatable; }
   public void setDatatable(HtmlDataTable newValue) { datatable = newValue; }
public String altera() { 
 
  CidadeBean cidselecionada = (CidadeBean)datatable.getRowData(); 
  codcidade = cidselecionada.getCodcidade();
  
...    
}

aguardo ...
abraço
t+

Criado 13 de dezembro de 2006
Ultima resposta 14 de dez. de 2006
Respostas 3
Participantes 2