Probleme mit nodeSelectListener in rich:tree

In der Baumkomponente von RichFaces ist es möglich einen “nodeSelectListener” zu registrieren.

<rich:tree switchType="ajax"
           binding="#{managedBean[binding]}"
           componentState="#{managedBean[state]}"
           ajaxSubmitSelection="true"
           nodeSelectListener="#{managedBean[nodeListener]}"  >
  <rich:recursiveTreeNodesAdaptor id="adapter"
                                  roots="${managedBean[treeModel]}"
                                  var="item"
                                  nodes="#{item.childs}" >
    <rich:treeNode id="node"  >
      <h:outputText value="#{item.name}"  />
    </rich:treeNode>
  </rich:recursiveTreeNodesAdaptor>
</rich:tree>

Der Listener wird gefeuert, wenn ein Element des Baumes selektiert bzw. angeklickt wird. Jetzt habe ich festgestellt, dass die registrierte Methode nur beim ersten Klick auf das Baumelement aufgerufen wird. Bei jedem weiteren Klick auf das selektierte Element wird zwar ein Request abgeschickt und der Lifecycle durchlaufen, jedoch wird die Methode nicht aufgerufen.

Das ist ja mal wieder ganz toll. So wie ich das sehe ist der Name “nodeSelectListener” falsch gewählt. Dem verhalten nach zu urteilen ist das eher ein “changeNodeSelecttionListener”.

Ein möglicher Workarround besteht dadrin, auf den “nodeSelectListener” zu verzichten und in der treeNode einen commandLink zu plazieren.

<rich:tree switchType="ajax"
           binding="#{managedBean[binding]}"
           componentState="#{managedBean[state]}"
           ajaxSubmitSelection="true"  >
  <rich:recursiveTreeNodesAdaptor id="adapter"
                                  roots="${managedBean[treeModel]}"
                                  var="item"
                                  nodes="#{item.childs}" >
    <rich:treeNode id="node"  >
      <h:commandLink action="#{treeBean.doSelectNode}"  value="#{item.name}"  />
    </rich:treeNode>
  </rich:recursiveTreeNodesAdaptor>
</rich:tree>

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s