Hi,
I have a UIBackbaseMenuItem and I need to add another UIBackbaseMenuItem to it as a child. The code is below. The observed behavior is that is it adding as it was a direct child to the MenuBar and not the MenuItem. How do you programmatically add a child MenuItem?
UIBackbaseMenuItem menuItem = new UIBackbaseMenuItem();
menuItem.setId(rpass.getPass(10));
menuItem.setItemLabel(item.getStringToDisplay());
menuItem.setItemValue(item.getAction());
menuItem.setSelectListener(FacesContext.getCurrentInstance().getApplication().createMethodBinding("#{mainBackingBean.universalSelectMenuItem}",listenerClass ));
pMenuItem.addChild(menuItem);

Need to programmatically add menuitems
29 December, 2006 - 15:55 — AnonymousHi Edward,
Could you provide more code, since the following code seems to be working for me:
jsp:
<bjs:menuItem itemLabel="File" binding="#{sampleBean.item}">
<bjs:menuItem itemLabel="Open"/>
<bjs:menuItem itemLabel="Save" />
</bjs:menuItem>
</bjs:menuBar>
<bjs:commandButton actionListener="#{sampleBean.addMenuItem}"
value="Click here to add a menu item" />
backing bean:
UIBackbaseMenuItem item;
public UIBackbaseMenuItem getItem() {
return item;
}
public void setItem(UIBackbaseMenuItem item) {
this.item = item;
}
public UIBackbaseMenuBar getBar() {
return bar;
}
public void setBar(UIBackbaseMenuBar bar) {
this.bar = bar;
}
public void addMenuItem(ActionEvent event) {
log.debug(item.getChildCount());
UIBackbaseMenuItem menuItem = new UIBackbaseMenuItem();
menuItem.setId("someNewId");
menuItem.setItemLabel("New label");
menuItem.setItemValue("New value");
item.addChild(menuItem);
}
Maybe this already helps...
Cheers,
Robin
Code does not work
21 April, 2008 - 13:39 — llperThe example does not work in 4.2.0.
I get:
2: API: Invalid argument type in call to API function "construct", argument 1: expected "[model]", but was "[null]".
Best regards,
D
MenuPopUp is not closed
19 May, 2008 - 11:00 — andysHi llper,
It is indeed will return error. It is because the menuPopUp has no close tag after the programmatically adding the menuPopUpItem.
This is the response that I got from the server:
<b:menuPopUp>
<b:menuPopUpItem label="Open" id="menu:File:Open"></b:menuPopUpItem>
<b:menuPopUpItem label="Save" id="menu:File:Save"></b:menuPopUpItem>
<b:menuPopUpItem label="New label" id="menu:File:Newvalue"></b:menuPopUpItem>
</c:create>
I considered it as a bug and I have already put it on our issue tracking system.
Thank you for your finding.
Andys
Need to programmatically add menuitems
29 December, 2006 - 16:04 — AnonymousHere it is. Thanks Robin for your help. The code looks similar but the results are not the same.
public void presentMenu(UIBackbasePanel pParent) throws CFMException {
CFMAbstractApplication application = getCFMVisit().getActiveApplication();
CFMAbstractMenu menu = application.getMenu();
UIBackbaseMenuBar menuBar = new UIBackbaseMenuBar();
menuBar.setId(rpass.getPass(10));
pParent.addChild(menuBar);
Class[] listenerClass = new Class[1];
try { listenerClass[0] = Class.forName("com.backbase.bjs.event.SelectEvent"); }
catch (ClassNotFoundException e) { e.printStackTrace(); }
ArrayList rootElements = menu.getRootElements();
for (int i = 0;i<rootElements.size();i++) {
CFMMenuItemStandardImpl item = (CFMMenuItemStandardImpl)rootElements.get(i);
UIBackbaseMenuItem menuItem = new UIBackbaseMenuItem();
menuItem.setId(rpass.getPass(10));
menuItem.setItemLabel(item.getStringToDisplay());
if (item.getAction() == null) menuItem.setItemValue("NO ACTION " + rpass.getPass(5));
else {
menuItem.setItemValue(item.getAction().getName());
item.setUIBackbaseMenuItem(menuItem);
}
menuItem.setSelectListener(FacesContext.getCurrentInstance().getApplication().createMethodBinding("#{mainBackingBean.universalSelectMenuItem}",listenerClass ));
menuBar.addChild(menuItem);
processMenu(menuItem,item);
}
}
public void processMenu(UIBackbaseMenuItem pMenuItem,CFMMenuItemStandardImpl pItem) {
ArrayList children = getCFMVisit().getActiveApplication().getMenu().getChildren(pItem);
for (int i = 0;i<children.size();i++) {
CFMMenuItemStandardImpl item = (CFMMenuItemStandardImpl)children.get(i);
Class[] listenerClass = new Class[1];
try { listenerClass[0] = Class.forName("com.backbase.bjs.event.SelectEvent"); }
catch (ClassNotFoundException e) { e.printStackTrace(); }
UIBackbaseMenuItem menuItem = new UIBackbaseMenuItem();
menuItem.setId(rpass.getPass(10));
menuItem.setItemLabel(item.getStringToDisplay());
if (item.getAction() == null) menuItem.setItemValue("NO ACTION " + rpass.getPass(5));
else menuItem.setItemValue(item.getAction().getName());
menuItem.setSelectListener(FacesContext.getCurrentInstance().getApplication().createMethodBinding("#{mainBackingBean.universalSelectMenuItem}",listenerClass ));
pMenuItem.addChild(menuItem);
}
}
Need to programmatically add menuitems
30 December, 2006 - 03:26 — AnonymousPlease close this case. I have resolved the problem.
Thanks
Same issue
27 August, 2008 - 21:55 — jspearsAny chance for a work-around and or a timeline for when this will be fixed, the next release of the JSF componenets?