HtmlDropDownMenu and HtmlMemuItem
riky Nov 30, 2011 5:48 AMAll,
I'm fighting to associate an action to the label of a dynamic menu (from a db).
Can someone help me?
Follow the code:
@Stateful
@Name("dynMenu")
@Scope(ScopeType.SESSION)
@Restrict("#{identity.loggedIn}")
public class DynMenuAction implements IDynMenuAction
{
private HtmlDropDownMenu gtsMenu = new HtmlDropDownMenu();
...
public void getDynamicMenu()
{
log.info("Creating menu");
FacesContext fc = FacesContext.getCurrentInstance();
ELContext el = fc.getELContext();
gtsMenu.setValue(Utils.getBundle().getString(TITLE).toString());
// List<LayoutComposition> lc = new ArrayList<LayoutComposition>();
// lc = dao.getDynMenu(contractId_);
// log.info("the contract has " + lc.size() + " sections.");
for (LayoutComposition component : associatedLayout_)
{
log.info("component code: " + component.getCategoryCode().getCode());
HtmlMenuItem menuItem = (HtmlMenuItem) fc.getApplication().createComponent(HtmlMenuItem.COMPONENT_TYPE);//new HtmlMenuItem();
menuItem.setValue(component.getTitle().toString());
menuItem.setSubmitMode("ajax");
if (component.getCategoryCode().getCode()
.equals(DynMenuLink.LGSVC.name()))
{
log.info("categoryCode ::"
+ component.getCategoryCode().getCode() + "::");
MethodExpression me = fc
.getApplication()
.getExpressionFactory()
.createMethodExpression(
el,
"#{dynMenu.jumpTo('"
+ DynMenuLink.LGSVC.getLink()
.toString() + "')}",
null, new Class[]{});
menuItem.setActionExpression(me);
menuItem.setRendered(true);
}
gtsMenu.getChildren().add(menuItem);
}
public String jumpTo(ActionEvent actEvent)
{
HtmlMenuItem item = (HtmlMenuItem) actEvent.getSource();
if (item != null)
{
lastItem = item.getValue().toString();
log.info("Clicked On: " + lastItem);
}
return item.getValue().toString();
}
...
}<h:form>
<rich:panelMenu style="border:1px solid black; width:200px">
<rich:dropDownMenu direction="bottom-right" jointPoint="tr"
id="dynMenu" value="Contract Sections" binding="#{dynMenu.GTSMenu}" mode="ajax"/>
</rich:panelMenu>
</h:form>This is what I see in page.
<div class="rich-menu-item rich-menu-item-enabled " id="j_id41:j_id43:j_id78" onclick="RichFaces.Menu.updateItem(event,this);A4J.AJAX.Submit('j_id41:j_id43',event,{'similarityGroupingId':'j_id41:j_id43:j_id78','parameters':{'j_id41:j_id43:j_id78':'j_id41:j_id43:j_id78'} } )" style="">
<span class="rich-menu-item-icon " id="j_id41:j_id43:j_id78:icon">
<img alt="" height="16" src="/smsprj/a4j/g/3_3_3.Finalimages/spacer.gif" width="16">
</span>
<span class="rich-menu-item-label" id="j_id41:j_id43:j_id78:anchor">SERVICES SECTION</span>
</div>As you see I get correctly the value (set as label, SERVICE SECTION) but the action don't work (at the moment should be only logged).
Thanks,
R.