Entidade selecionada da rich:datatable com páginação

4 respostas
dreampeppers99

Costumo a usar rich:datatable e recupero as entidades clicadas com esse código.

public final static Object selecionado(final String formulario,final String tabela) { try { final UIComponent comp = FacesContext.getCurrentInstance().getViewRoot().findComponent(formulario); final javax.faces.component.UIData data = (javax.faces.component.UIData) comp.findComponent(tabela); return data.getRowData(); } catch (final Exception e) { throw new IllegalArgumentException("Houve um erro ao tentar selecionar o registro no formulário.\n" + "Form = " +formulario+"\n" +"Tabela:" +tabela+"\n" +"Veja se os nomes estao corretos <h:form id=\"" +formulario+"\"> e"+" <h:dataTable id=\""+tabela+">",e); } }
ps: crio uma coluna do tipo h:commandlink e dela chamo a ação (que executa esse método para ver qual entidade foi a selecionada).

Funciona perfeitamente na primeira página (rich:datascroller) mas quando navego para página 2 ou outra e clico no link (editar) o código não é executado e o que acontece é que o paginamento me envia novamente para página 1.

Há algo que possa fazer?

desde já obrigadão.

4 Respostas

dreampeppers99

esse problema persiste… durante as versões seculares rsrsrsr
[espero que o jsf2 e richfaces 4 resolvam isso]

rbroz85

nao sei se eu entendi sua questao…
acho que vc esta tentando pegar um objeto do datatable… bem digamos que vc tenha esse datatable:

<rich:dataTable var="use" value="#{UsuarioBean.listUsers}">
  <rich:column width="120">
    <h:inputHidden value="#{use.idUsuario}" />
    <h:outputText value="#{use.nome}"/>
  </rich:column>
  <rich:column>
    <a4j:commandButton value=">" action="#{UsuarioBean.haveOneUser}" styleClass="botblue" reRender="formcadUser"/>
  </rich:column>
</rich:dataTable>

pra pegar no ManagedBean:

public String haveOneUser(){
        HttpServletRequest sr = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        Usuario u = (Usuario) sr.getAttribute("use");

        return "";
    }

espero ter ajudado…

abs

dreampeppers99

rbroz85:
nao sei se eu entendi sua questao…
acho que vc esta tentando pegar um objeto do datatable… bem digamos que vc tenha esse datatable:

<rich:dataTable var="use" value="#{UsuarioBean.listUsers}">
  <rich:column width="120">
    <h:inputHidden value="#{use.idUsuario}" />
    <h:outputText value="#{use.nome}"/>
  </rich:column>
  <rich:column>
    <a4j:commandButton value=">" action="#{UsuarioBean.haveOneUser}" styleClass="botblue" reRender="formcadUser"/>
  </rich:column>
</rich:dataTable>

pra pegar no ManagedBean:

public String haveOneUser(){
        HttpServletRequest sr = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        Usuario u = (Usuario) sr.getAttribute("use");

        return "";
    }

espero ter ajudado…

abs

:slight_smile: Eu até consigo pegar o usuário (prefiro o modo f:ActionlistenerParam) … o problema é que esse mesmo metodo não é nem executado quando eu uso a combinação explosiva: rich:dataTable e rich:scroller! Na primeira página (baseando-se que a table trouxe vários resultados além) ele executa o método (ou qualquer action) normalmente… porém quando passo para página 2 aí é clico no link/botão a mesma action não é nem executada.

thiago_leo

Amigo, você conseguiu resolver seu problema ?
Estou com este mesmo problema…

Obrigado,

Thiago

Criado 31 de maio de 2010
Ultima resposta 22 de mar. de 2011
Respostas 4
Participantes 3