call action of rich:panelMenuGroup/a4j:support to another pa
argonist Feb 5, 2009 7:36 AMHello,
I am developing a dynamic navigationsmenu with datas from database. The navigation on the same page isn't problem, but the navigation to another page isn't working.
I am using Ricefaces 3.1.6 GA, JBoss 4.0.5
The panelMenu is binding to the jsp-compontent.
navigation.jsp
<t:div>
<rich:panelMenu binding="#{navigationMenu.panelMenu}"
style="width:160px" mode="server" expandSingle="true">
</rich:panelMenu>
</t:div>
The calling the action of rich:panelMenuGroup isn't working, that I am taking a4j:support to call the action.
Bean #{navigationMenu}
private HtmlPanelMenu;
....
....
@SuppressWarnings("deprecation")
public void loadNavigation(User user) {
panelMenu = new HtmlPanelMenu();
if(user == null){
user = ejbHandler.authSession.find("unknown");
}
Collection<HtmlContentNavigation> htmlNaviItems = this.ejbHandler.contentSession.getNavigationItems();
FacesContext context = FacesContext.getCurrentInstance();
Application app = context.getApplication();
for (HtmlContentNavigation n : htmlNaviItems) {
String action = "#{navigationMenu.map." + myKey(n.getNodeName()) + ".action}";
HtmlPanelMenuGroup group = new HtmlPanelMenuGroup();
HtmlAjaxSupport ajaxSupport = new HtmlAjaxSupport();
ajaxSupport.setAction(app.createMethodBinding( action, null));
ajaxSupport.setEvent("onclick");
ajaxSupport.setReRender("content");
ajaxSupport.setImmediate(true);
group.getFacets().put("a4jsupport", ajaxSupport);
group.setImmediate(true);
group.setLabel(n.getNodeName());
group.setRendered(user.isSubscribedToTopic(n.getTopic()));
if (!n.getChilds().isEmpty()) {
group.setIconCollapsed("chevron");
group.setIconExpanded("chevronDown");
}
TX tx = new TX();
tx.value = n.getNodeName();
tx.naviItem = n;
tx.menu = this;
map.put(myKey(n.getNodeName()), tx);
panelMenu.getChildren().add(addChilds(user,n, group));
}
}
private String myKey(String nodeName) {
return "K" + Math.abs(nodeName.hashCode()) + "_";
}
@SuppressWarnings("deprecation")
private HtmlPanelMenuGroup addChilds(User user, HtmlContentNavigation nav, HtmlPanelMenuGroup group) {
FacesContext context = FacesContext.getCurrentInstance();
Application app = context.getApplication();
if(nav == null){
return group;
}
for(HtmlContentNavigation c: nav.getChilds()){
String action = "#{navigationMenu.map." + myKey(c.getNodeName())+ ".action}";
if ((c.getChilds() != null && c.getChilds().isEmpty())) {
HtmlPanelMenuItem item = new HtmlPanelMenuItem();
item.setAction(app.createMethodBinding(action, null));
item.setRendered(user.isSubscribedToTopic(c.getTopic()));
item.setLabel(c.getNodeName());
item.setImmediate(true);
item.setReRender("content");
group.getChildren().add(item);
}
if ((c.getChilds() != null && !c.getChilds().isEmpty())) {
HtmlPanelMenuGroup subgroup = new HtmlPanelMenuGroup();
subgroup.setLabel(c.getNodeName());
subgroup.setRendered(user.isSubscribedToTopic(c.getTopic()));
subgroup.setIconCollapsed("disc");
subgroup.setIconExpanded("disc");
subgroup.setAction(app.createMethodBinding( action, null));
subgroup.setReRender("content");
subgroup.setImmediate(true);
HtmlAjaxSupport ajaxSupport = new HtmlAjaxSupport();
ajaxSupport.setAction(app.createMethodBinding( action, null));
ajaxSupport.setEvent("onclick");
ajaxSupport.setReRender("content");
subgroup.getFacets().put("a4jsupport", ajaxSupport);
group.getChildren().add(addChilds(user,c,subgroup));
}
TX tx = new TX();
tx.value = c.getNodeName();
tx.menu = this;
tx.naviItem = c;
map.put(myKey(c.getNodeName()), tx );
}
return group;
}
Have you idea to solve that problem?
Manu