My sub-menus don't appear in UIToolBar
thsrocha May 18, 2012 4:40 PMHello guys, is my first post here.
I have an application with a dynamic menu, i´m trying to migrate from richfaces 3.x to 4.x but it´s not working. I´ve searched another thread but I couldn´t find anything.
Let start.
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <description>Facelets StarterKit</description> <display-name>ScapWebMigracao</display-name> <context-param> <param-name>org.richfaces.skin</param-name> <param-value>blueSky</param-value> </context-param> <context-param> <param-name>org.richfaces.fileUpload.maxRequestSize</param-name> <param-value>100000</param-value> </context-param> <context-param> <param-name>org.richfaces.fileUpload.createTempFiles</param-name> <param-value>false</param-value> </context-param> <context-param> <param-name>javax.faces.FACELETS_LIBRARIES</param-name> <param-value>/WEB-INF/app-tags.taglib.xml</param-value> </context-param> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param> <context-param> <param-name>javax.faces.STATE_SAVING_METHOD</param-name> <param-value>server</param-value> </context-param> <context-param> <param-name>com.sun.faces.validateXml</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>com.sun.faces.verifyObjects</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>com.sun.faces.expressionFactory</param-name> <param-value>org.jboss.el.ExpressionFactoryImpl</param-value> </context-param> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.jsf</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <servlet> <servlet-name>CaptchaServlet</servlet-name> <servlet-class>com.aspin.scapweb.servlet.CaptchaServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CaptchaServlet</servlet-name> <url-pattern>/captcha.jpg</url-pattern> </servlet-mapping> <session-config> <session-timeout>20</session-timeout> </session-config> <listener> <listener-class>com.aspin.scapweb.login.SessionController</listener-class> </listener> <mime-mapping> <extension>xcss</extension> <mime-type>text/css</mime-type> </mime-mapping> <login-config> <auth-method>BASIC</auth-method> </login-config> </web-app>
When i use the method getToolBar() he's calling this method:
private void createMenu() {
int idMenuItem=0, idDropDownMenu = 0, idMenuGroup=0;
FacesContext facesContext = FacesContext.getCurrentInstance();
ExpressionFactory expressionFactory = facesContext.getApplication().getExpressionFactory();
List<MenuWeb> listMenuWeb = null;
try {
MenuWebRG menuwebRG = new MenuWebRG();
listMenuWeb = menuwebRG.findMenuWebUsuario(usuario, null);
} catch (Exception e) {
LogSistema.RegistraLog(this.getClass(), LogSistema.ERROR, "(createMenu): " + e.getMessage());
}
HashMap<Integer, UIComponent> hashMap = new HashMap<Integer, UIComponent>();
toolBar = (UIToolbar) facesContext.getApplication()
.createComponent(facesContext, UIToolbar.COMPONENT_TYPE,
"org.richfaces.ToolbarRenderer");
UIComponent component = null;
for (MenuWeb menuweb : listMenuWeb) {
if (menuweb.getNusuperior() == null || menuweb.getNusuperior().equals("")) {
UIDropDownMenu dropDownMenu = (UIDropDownMenu) facesContext.getApplication()
.createComponent(facesContext, UIDropDownMenu.COMPONENT_TYPE,
"org.richfaces.DropDownMenuRenderer");
dropDownMenu.setLabel(menuweb.getNmmenuweb());
dropDownMenu.setMode(Mode.ajax);
dropDownMenu.setId("dropDownMenu"+idDropDownMenu);
toolBar.getChildren().add(dropDownMenu);
hashMap.put(menuweb.getNumenuweb(), dropDownMenu);
idDropDownMenu++;
} else if (menuweb.getNmaplicacao() == null || menuweb.getNmaplicacao().equals("")) {
UIMenuGroup menuGroup = (UIMenuGroup) facesContext.getApplication().createComponent(
facesContext,UIMenuGroup.COMPONENT_TYPE,"org.richfaces.MenuGroupRenderer");
menuGroup.setValue(menuweb.getNmmenuweb());
menuGroup.setId("idMenuGroup"+idMenuGroup);
component = hashMap.get(menuweb.getNusuperior());
component.getChildren().add(menuGroup);
idMenuGroup++;
hashMap.put(menuweb.getNumenuweb(), menuGroup);
} else {
UIMenuItem menuItem = (UIMenuItem) facesContext.getApplication().createComponent(facesContext,
UIMenuItem.COMPONENT_TYPE,
"org.richfaces.MenuItemRenderer");
menuItem.setValue(menuweb.getNmmenuweb());
menuItem.setMode(Mode.ajax);
menuItem.setId("idMenuItem"+idMenuItem);
MethodExpression methodExpression = expressionFactory.createMethodExpression(
facesContext.getELContext(), "#{menu.selItem}",
String.class, new Class[] {});
menuItem.setActionExpression(methodExpression);
UIParameter param = new UIParameter();
param.setName("urlPagina");
param.setValue(menuweb.getNmaplicacao());
menuItem.getChildren().add(param);
menuItem.setRender("incBody");
menuItem.setExecute("@this");
if(hashMap.get(menuweb.getNusuperior()) instanceof UIDropDownMenu){
component = (UIDropDownMenu)hashMap.get(menuweb.getNusuperior());
component.getChildren().add(menuItem);
}else{
component = (UIMenuGroup)hashMap.get(menuweb.getNusuperior());
component.getChildren().add(menuItem);
}
}
}
}
But my problem is, when i start the application my sub menus(UIMenuItem) don't appear.
like this:
So finally is this.
I hope someone help !
Cheers!!
