Hi,
no, that's not what I meant. If the method of your actionListener
currently points to a backing bean method, that's fine. The approach
that I described in my earlier post is a bit more "object-centric". The
object that is manipulated (i.e. your tree node) knows how to react to
an event. My suggestion is to only use one single method, preferrably
the actionListener method. The code that I moved to "MyBaseNode1" can
stay in your backing bean, if your prefer that solution. Anyway, if it
is one of your requisites to have many different actions that are to be
processed when a node is clicked, you could use the interface to
generalize the behaviour and have better reusablity. But maybe that's
more than your application has to do right now ;).
Cheers,
Christopher
kewldude schrieb:
Hi Chris,
If I get what you mean by this approach, does this mean my backing bean for
the tree itself will be MyBaseNode1 object because it is from that object
where i will point my actionListener, myBaseNode1.onClick, is that right?
Christopher Cudennec wrote:
Hi!
as long as the code of method "setNodeSelected" does not depend on
having an instance of ActionEvent you could simple pass "null" as a
parameter. In my opinion you should do some refactoring because you use
"action" and "actionListener" at the same time. The "action" method is
basically used for navigation and that is not what you want to do here.
You probably just return "null", right? Why not doing throwing away the
action and doing something like:
interface ClickableBaseNode {
public void onClick(ActionEvent event);
}
class MyBaseNode1 extends TreeNodeBase implements ClickableBaseNode {
public void onClick(ActionEvent event) {
setNodeSelected(event);
ClickableBaseNode anotherNode = findAnotherNode();
anotherNode.onClick();
}
}
class MyBaseNode2 extends TreeNodeBase implements ClickableBaseNode {
public void onClick(ActionEvent event) {
setNodeSelected(event);
getTreeBacker().processFolder();
}
}
You just have to create proper implementations of "ClickableBaseNode"
that suit your needs.
Christopher
kewldude schrieb:
Thanks Christopher, I got the idea, but this is where I am really
struggling.
Together with executing the action associated with the node, I have to
change its styleclass to reflect that it was as if the node was clicked.
To
achieve that using the normal way, my command link has this:
<a4j:commandLink id="a4jLink" styleClass="#{t.nodeSelected?
'documentSelected':'document'}" action="#{treeBacker.processFolder}"
actionListener="#{t.setNodeSelected}" reRender="a4jGroup" >
To do that programmatically, I think I have to invoke the setNodeSelected
in
the backing bean, the problem now is the setNodeSelected is associated
with
an ActionEvent, I dont have an ActionEvent object because there was no
actual action that generates the event , I'm just simulating the "event"
programmatically. Any more hints?...
Christopher Cudennec wrote:
Hi there,
you could implement your own TreeNode adding a new method "onClick" (or
whatsoever) that can be called when you found the match in your backing
bean. Does that solve your problem? (Look here for a start:
http://myfaces.apache.org/tomahawk/apidocs/org/apache/myfaces/custom/tree2/TreeNodeBase.html)
Cheers,
Christopher
kewldude schrieb:
Here goes the situation, I have a textbox that can search through the
nodes
in the tree2 component. When there is a match, I need to expand the
specific
node. I can do that part no problem. But together with expanding that
node,
the action associated to that node should also be executed (it was as
if
that node was clicked), how can I do that? or is it possible to do that
all?
any hints...thanks.