JSF commandLink com datatable não funciona

8 respostas
bbmoura

Estou tentando fazer uma coisa muito simples. Mas não estou conseguindo. Utilizar uma <h:datatable(ou t:datalist)> que contenha uma lista que contem o “String name” e o “String action” que são passados para o componente <h:commandLink>. Segue o código:

<h:form id=“frm”>

<h:dataTable id=“table” value="#{testeLista.lista}" var=“iterator”>

<h:column id=“col”>

<h:commandLink id=“link” action="#{iterator.action}">

< h:outputText id=“text” value="#{iterator.value}" >              </h:outputText>

</ h:commandLink>

</h:column>

</h:dataTable>

</h:form >

Ele imprime perfeitamente os commandLinks com o nome (inclusive se eu colocar o action como nome ele tb imprime perfeitamente), porém quando clico no link da a exceção:
javax.servlet.ServletException: Error calling action method of component with id

não sei mais o que fazer, já procurei no google e dizem até que é bug, mas já testei com myfaces 1.1.1 e 1.1.3 (que é a última versão). Se alguém já conseguiu fazer isso funcionar por favor me de uma mão. Por que é inviável que uma coisa tão simples dessa não funcione.

Obrigado

8 Respostas

urubatan

o probleá é que no JSF não da pra fazer isto: <h:commandLink id=“link” action="#{iterator.action}">
por que #{iterator.action} quer dizer para ele procurar um bean com o nome iterator e executar o metodo action dele.

bbmoura

não … ele procura o bean correto … que ele recebe da lista do datatable … tanto que na exceção dá:

Caused by: javax.faces.el.EvaluationException: Exception while invoking expression #{favoriteIcon.navigationRule}

at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:165)

at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:63) 24 more

Caused by: java.lang.NoSuchMethodException: [color=red]nms.persistence.pojo.FavoriteIcon.navigationRule()[/color]

at java.lang.Class.getMethod(Unknown Source)

at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:118) 25 more

ou seja … ele ateh acha a classe que contém o método que devolveria a String com a ‘action’, mas mesmo assim não funciona …

Mas se não der mesmo para fazer isso da maneira que estou fazendo, como eu faço no JSF para ter um datatable de links que sejam dinâmicos??

obrigado

urubatan

bbmoura:
não … ele procura o bean correto … que ele recebe da lista do datatable … tanto que na exceção dá:

Caused by: javax.faces.el.EvaluationException: Exception while invoking expression #{favoriteIcon.navigationRule}

at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:165)

at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:63) 24 more

Caused by: java.lang.NoSuchMethodException: [color=red]nms.persistence.pojo.FavoriteIcon.navigationRule()[/color]

at java.lang.Class.getMethod(Unknown Source)

at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:118) 25 more

ou seja … ele ateh acha a classe que contém o método que devolveria a String com a ‘action’, mas mesmo assim não funciona …

Mas se não der mesmo para fazer isso da maneira que estou fazendo, como eu faço no JSF para ter um datatable de links que sejam dinâmicos??

obrigado


bom, com datatable eu nunca fiz isto, mas o tomahawk tem componentes prontos pra isto :smiley:
da uma olhadinha:
http://myfaces.apache.org

bbmoura

já tentei atualizar o myfaces p 1.1.3 e utilizar componentes do Tomahawk como t:dataList / t:datatable / t:commandLink … mas tds dao o mesmo erro …
isso é bastante fustrante, pois o JSF se mostra um excelente framework p desenvolvimento web, porém não poderia apresentar esses error para coisas tão simples … obrigado pelas resposta … se alguém tiver mais alguma idéia eu agradeço

urubatan

bbmoura:
já tentei atualizar o myfaces p 1.1.3 e utilizar componentes do Tomahawk como t:dataList / t:datatable / t:commandLink … mas tds dao o mesmo erro …
isso é bastante fustrante, pois o JSF se mostra um excelente framework p desenvolvimento web, porém não poderia apresentar esses error para coisas tão simples … obrigado pelas resposta … se alguém tiver mais alguma idéia eu agradeço

eu falei apra usar componentes proprios para isto, como o panelNavigation

bbmoura

o problema é que o panelNavigation só aceita <t:commandNavigation> e eu preciso passar uma list (util.List) … dai não me adianta … agradeço as tuas respostas … mas ainda não sei oq fazer

urubatan

se tu quer algum dia ser um programador de verdade, tu vai ter que aprender a olhar a porcaria da documentação com atenção

http://myfaces.apache.org/tomahawk/panelNavigation2
aceita:
<t:navigationMenuItem> tags (NavigationMenuItem)
<t:navigationMenuItems> tags (NavigationMenuItem(s))

bbmoura

obrigado pela parte que me toca (apesar de achar que mereci hehe), é q eu tinha olhado apenas o panelNavigation… não tinha visto o panelnavigation2 … acho que agora vou poder gambiarrar com este componente … apesar de achar que é uma falha mt grande uma dataTable não aceitar links dinâmicos … valeu pela atenção …

Criado 16 de junho de 2006
Ultima resposta 19 de jun. de 2006
Respostas 8
Participantes 2