You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Marti Hanspeter <ha...@mms-dresden.de> on 2006/01/30 16:42:29 UTC

cerateMethodeBinding

hi,

i am new in myfaces and beans and try to find out how i can pass arguments
with cerateMethodeBinding.
my bean adds some commandLink commponents to the view and each action of the
commandLink commponent points back to the bean. So far it works, but i would
like to detect with commandLink commponent was clicked. I tried with arrays
like...

DummyModel.getDummyItems()[1].doSomeThing(); --> #{DummyBean.???}

Does that works or are i total wrong?

Is there another workaround to solve this problem?

Thanks!
regards,
Hanspeter

Ex.:

public class DummyModel {
	
	private List _listItems; 
	
	public DummyModel() {
		_listItems = new ArrayList();
		_listItems.add(new MenuNode("Node 1", 0));
		_listItems.add(new MenuNode("Node 2", 1));
		_listItems.add(new MenuNode("Node 3", 2));
		_listItems.add(new MenuNode("Node 4", 3));
		
	}
	
    	public MenuNode[] getDummyItems()
    	{
        	if (_listItems == null) return new MenuNode[0];
        	return (MenuNode[]) _listItems.toArray(new
MenuNode[_listItems.size()]);
    	}
	
	public void doAction() {
		System.out.println("ok");
	}
}

public class DummyNode {
	
	private HtmlCommandLink linkItem;
	
	public HtmlCommandLink getHtmlCommandLink() {
		return linkItem;
	}
	
	public void doSomeThing() {
		System.out.println("doSomeThing in DummyNode ");
	}
	
	public DummyNode(String text, int index) {
		linkItem = new HtmlCommandLink();
		HtmlOutputText textItem = new HtmlOutputText();
		textItem.setValue(text);
		linkItem.getChildren().add(textItem);
		FacesContext context = FacesContext.getCurrentInstance();

		MethodBinding mb =
context.getApplication().createMethodBinding("#{DummyBean.doAction}", null);
		linkItem.setAction(mb);
	}
}



AW: cerateMethodeBinding

Posted by Marti Hanspeter <ha...@mms-dresden.de>.
Dear Onur,

That was a great help, and makes it much more simple. 
Yesterday i have give up and wrote a decode methode to get the id of the
submited component, but with ActionListener its much more elegant.

Thanks
Hanspeter

For other beginers, here the code:

---------------------------------------------

import javax.faces.event.ActionEvent;

public void doAction (ActionEvent e) {
	UIComponent component = e.getComponent();
	FacesContext context = FacesContext.getCurrentInstance();
    	String nodeId = component.getClientId(context);
}


MethodBinding:

MethodBinding mb =
context.getApplication().createMethodBinding("#{DummyBean.doAction }", new
Class[]{ActionEvent.class});
linkItem.setActionListener(mb);



-----Ursprüngliche Nachricht-----
Von: Onur Tokan [mailto:otokan@gmail.com] 
Gesendet: Dienstag, 31. Januar 2006 07:53
An: MyFaces Discussion
Betreff: Re: cerateMethodeBinding


Hi,

Change doAction method to action listener type, and change in your code
linkItem.setAction(mb); ---> linkItem.setActionListener(mb);

Now You got an ActionEvent object in your actionListener,

Hope it helps,

Regards,
Onur



On 1/30/06, Marti Hanspeter <ha...@mms-dresden.de> wrote:
> hi,
>
> i am new in myfaces and beans and try to find out how i can pass 
> arguments with cerateMethodeBinding. my bean adds some commandLink 
> commponents to the view and each action of the commandLink commponent 
> points back to the bean. So far it works, but i would like to detect 
> with commandLink commponent was clicked. I tried with arrays like...
>
> DummyModel.getDummyItems()[1].doSomeThing(); --> #{DummyBean.???}
>
> Does that works or are i total wrong?
>
> Is there another workaround to solve this problem?
>
> Thanks!
> regards,
> Hanspeter
>
> Ex.:
>
> public class DummyModel {
>
>        private List _listItems;
>
>        public DummyModel() {
>                _listItems = new ArrayList();
>                _listItems.add(new MenuNode("Node 1", 0));
>                _listItems.add(new MenuNode("Node 2", 1));
>                _listItems.add(new MenuNode("Node 3", 2));
>                _listItems.add(new MenuNode("Node 4", 3));
>
>        }
>
>        public MenuNode[] getDummyItems()
>        {
>                if (_listItems == null) return new MenuNode[0];
>                return (MenuNode[]) _listItems.toArray(new
> MenuNode[_listItems.size()]);
>        }
>
>        public void doAction() {
>                System.out.println("ok");
>        }
> }
>
> public class DummyNode {
>
>        private HtmlCommandLink linkItem;
>
>        public HtmlCommandLink getHtmlCommandLink() {
>                return linkItem;
>        }
>
>        public void doSomeThing() {
>                System.out.println("doSomeThing in DummyNode ");
>        }
>
>        public DummyNode(String text, int index) {
>                linkItem = new HtmlCommandLink();
>                HtmlOutputText textItem = new HtmlOutputText();
>                textItem.setValue(text);
>                linkItem.getChildren().add(textItem);
>                FacesContext context = 
> FacesContext.getCurrentInstance();
>
>                MethodBinding mb = 
> context.getApplication().createMethodBinding("#{DummyBean.doAction}",
null);
>                linkItem.setAction(mb);
>        }
> }
>
>
>


Re: cerateMethodeBinding

Posted by Onur Tokan <ot...@gmail.com>.
Hi,

Change doAction method to action listener type, and change in your
code linkItem.setAction(mb); ---> linkItem.setActionListener(mb);

Now You got an ActionEvent object in your actionListener,

Hope it helps,

Regards,
Onur



On 1/30/06, Marti Hanspeter <ha...@mms-dresden.de> wrote:
> hi,
>
> i am new in myfaces and beans and try to find out how i can pass arguments
> with cerateMethodeBinding.
> my bean adds some commandLink commponents to the view and each action of the
> commandLink commponent points back to the bean. So far it works, but i would
> like to detect with commandLink commponent was clicked. I tried with arrays
> like...
>
> DummyModel.getDummyItems()[1].doSomeThing(); --> #{DummyBean.???}
>
> Does that works or are i total wrong?
>
> Is there another workaround to solve this problem?
>
> Thanks!
> regards,
> Hanspeter
>
> Ex.:
>
> public class DummyModel {
>
>        private List _listItems;
>
>        public DummyModel() {
>                _listItems = new ArrayList();
>                _listItems.add(new MenuNode("Node 1", 0));
>                _listItems.add(new MenuNode("Node 2", 1));
>                _listItems.add(new MenuNode("Node 3", 2));
>                _listItems.add(new MenuNode("Node 4", 3));
>
>        }
>
>        public MenuNode[] getDummyItems()
>        {
>                if (_listItems == null) return new MenuNode[0];
>                return (MenuNode[]) _listItems.toArray(new
> MenuNode[_listItems.size()]);
>        }
>
>        public void doAction() {
>                System.out.println("ok");
>        }
> }
>
> public class DummyNode {
>
>        private HtmlCommandLink linkItem;
>
>        public HtmlCommandLink getHtmlCommandLink() {
>                return linkItem;
>        }
>
>        public void doSomeThing() {
>                System.out.println("doSomeThing in DummyNode ");
>        }
>
>        public DummyNode(String text, int index) {
>                linkItem = new HtmlCommandLink();
>                HtmlOutputText textItem = new HtmlOutputText();
>                textItem.setValue(text);
>                linkItem.getChildren().add(textItem);
>                FacesContext context = FacesContext.getCurrentInstance();
>
>                MethodBinding mb =
> context.getApplication().createMethodBinding("#{DummyBean.doAction}", null);
>                linkItem.setAction(mb);
>        }
> }
>
>
>