Samstag, 18. Dezember 2010

JSF datatable und commandlink

JavaServer Faces 2.0.3
Tomahawk 1.1.10

Will man in seiner h:datatable einen h:commandlink verwenden und das dahinterliegende Bean im Requestscope arbeitet, passiert es häufig, das die action des h:commandlink einfach nicht ausgeführt wird. Viele Seiten im Netz beschäftigen sich mit diesem Phänomen, aber eine hieb und stichfeste Lösung findet man eigentlich nicht. Zum Laufen gebracht habe ich es dann mit der Tomahawk Version der datatable f:datatable.
Aber auch dabei gibt es einige Fallstricke, die einem im ersten Augenblick nicht ganz einleuchten.

Hier der xhtml Teil, wie er funktioniert, die Action also ausgeführt wird:


    
     
      
      
     
     
      
      
      
      
     
    
   

Zu beachten ist hier, das es nur funktioniert wenn preserveDatamodel true gesetzt wird, andernfalls wird die action des h:commandlinks nicht ausgeführt. Eine genauere Erklärung was preserveDataModel genau macht, findet man hier.

Eine weitere Falle stellt das attribute rendered dar, setzt man es als Attribut der t:datatable ein, funktioniert der h:commandlink schon wieder nicht.

f:param wird gesetzt, damit man in der Actionmethode auch den richtigen Eintrag erwischt:

FacesContext.getCurrentInstance().getExternalContext()
   .getRequestParameterMap().get("imageDetailInfo")

Links:
Artikel und Diskussion über dieses Problem
Blogbeitrag: Lösung des Problems durch Schreiben eines CommandLinkRenderers
Auführlicher Artikel von BalusC über das Arbeiten mit datatables

Keine Kommentare:

Kommentar veröffentlichen