Tabela HTML + EL + JSF = parametro errado

2 respostas
jopss

Olá a todos.
Estou com um problema aqui que nao consegui achar solução. Se alguem puder me dá um help eu agradeço.

Tenho uma tabela HTML puro com JSTL fazendo o carregamento dos beans nesta tabela.
Eu preciso agora é embutir um link numa das colunas dessa tabela, e quando o usuario clica nela,
pega o id do bean referenciado naquela coluna/linha, jogando para um backBean JSF.

Com dataTable eu poderia fazer sem problemas, mas tenho que usar tabela html + EL… como eu faria isso?
Eu tentei usar commandLink, iserindo um f:param pegando a variavel forEach e seu id , mas ocorreu um equívoco: nao importa qual linha eu clico, sempre me retorna o id da ultima linha mostrada na tabela. Queria por posicao, onde ao clicar no link, ele me retorna o id daquela linha.
Faço com esse erro assim:

<c:forEach items="${itemList}" var="i">
        <c:set scope="request" var="item" value="${i}"/>
        <tr>
            <td>
                   <c:out value="${item.descricao}"/>
            </td>
             <td>
                    <h:commandLink action="#{BackBean.excluir}" styleClass="link">
                         <h:outputText value="Excluir" />
                         <f:param name="id" value="#{item.id}" />
                    </h:commandLink>
            </td>
        </tr>
</c:forEach>

Teria como fazer isto corretamente. Veja que tenho que acessar um backBean e seu método, passando o id do bean EL da linha selecionada…
Uso o JSF 1.2, implementacao padrao, sem nenhum componete extra.

Para o retorno errado, faço assim:

String value = requestScope.getParameter("id");

att
vlw!!

jopss

2 Respostas

Javabuntu

eu já fiz isso com uma dataTable sem usar nenhum componente extra, apenas a tabela que se pode fazer usando o h:dataTable, que no final vira a mesma table simples de html, se você puder ao menos fazer a tabela desta maneira, não precisar adicionar nada do que já tem, pois precisará apenas as taglibs f: e h: e ambas você já tem…
vamos começar tentando isso:
no seu command link adicione o actionListener, vamos fazer um “aviso” de quando e onde clicarmos, fazendo uma referência ao método obtemValorSelecionado:

<h:commandLink actionListener="#{BackBean.obtemValorSelecionado}" action="#{BackBean.excluir}" styleClass="link">  
                          <h:outputText value="Excluir" />   
</h:commandLink>

partindo do principio que seu BackBean esteja ok, vamos acrescentar o obtemValorSelecionado.

// Método auxiliar pra pegar a linha selecionada
//adicione um object no seu bean

private Object objeto; // gerar gets e sets
public Object retornaLinhaSelecionada(ActionEvent event) {
		UIComponent src = (UIComponent) event.getSource();
		UIComponent coluna = src.getParent();
		UIData data = (UIData) coluna.getParent();
		return data.getRowData();
}

// usa o método acima, e pega o objeto selecionado
public void obtemValorSelecionado( ActionEvent event ){
		Object ob = getObjetoSelecionado(event);
		setObjeto(ob);
}


//aqui seu método que está na action, estes acimas foram pra actionListener
public void excluir(){
     //Faça um Cast pro tipo de objeto que está na lista, vamos supor que seja Usuario
      Usuario user = (Usuario) getObjeto();
      //Aqui você já tem o objeto que foi clicado, agora faça o que quiser com ele.

      seuMetodoDeExcluir(user);
}

testa ai e veja se funciona, senão não deu, mande os erros ai.

flw Hewerton

jopss

Olá Javabuntu… obrigado pela resposta…

Ta aí um prob, pq nao posso mesmo usar dataTable… com ela eu faria o getRowData de boa, mas preciso usar table html mesmo, pq eh uma tag personalizada, modificada para uns comportamentos que queremos, e com dataTable nao daria… o problema está na passagem do objeto no commandLink para o backBean… como é html teria que ter um geito de marcar cada linha com um id associado… tentei com f:param, c:param e hidden e nada…

verifiquei que com c:param dentro de uma c:url funciona… pq eu direcionei para uma pag qualquer e lá mostrou o id conforme a linha… mas agora como passar isso ao backbean já nao sei…

vlw! :lol:
jopss

Criado 10 de setembro de 2008
Ultima resposta 17 de set. de 2008
Respostas 2
Participantes 2