21 Eylül 2010 Salı

1-create pagetemplate, role based dynamic menu,page navigation

after creating template. insert a panelstrechlayout and configure for menu, banner, indicator,etc. we are using pagetemplates for inheritable content and actions. for example banner and menu or username info.


  
  
    
      
        templateMaster
        
          center
          center
        
      
    
    
      
        
          
            
          
                
                
                
                
          
            
          
          
            
          
          
        
      
      
        
          
            
          
        
      
    
  



below code show you; for creation role based menu using MenuBean.initMenu method and for logout dologout.

public class MenuBean
{
      private RichMenuBar initMenu;
  
     public void createMenus(PhaseEvent phaseEvent) 
     {

        // check the menu is already added
        boolean addMenu = true;
        for (Iterator iterator = initMenu.getChildren().iterator(); iterator.hasNext();) {
            UIComponent component = (UIComponent) iterator.next();
            if ( component.getId().startsWith("menuId")){
                addMenu = false;
            }
        } 
        if (addMenu) {

            // get roles
            String[] roles = ADFContext.getCurrent().getSecurityContext().getUserRoles();

            // get application module
            AppModuleImpl menuAM = getAm();
            SysmenuicerikViewImpl menuView = (SysmenuicerikViewImpl)menuAM.getSysmenuicerikView1();
            menuView.executeQuery();
          
            while (menuView.hasNext()) 
            {
           
                SysmenuicerikViewRowImpl menuItem =  (SysmenuicerikViewRowImpl)menuView.next();
                // check if the user has this role
                boolean roleFound = false;
                for (int i = 0 ; i < roles.length ; i++ )
                {
                    if ( roles[i].equalsIgnoreCase(menuItem.getRolaciklama()) )
                    {
                      roleFound = true;  
                    }
                }

                if (roleFound) {
                Boolean menuFound = false;
                RichMenu menu = new RichMenu();
                String menuId = "menuId" + menuItem.getMenukod().toString();

                // check if the main menu is already added
                for (Iterator iterator = initMenu.getChildren().iterator();
                     iterator.hasNext(); ) {
                    UIComponent component = (UIComponent)iterator.next();
                    if (component.getId().equalsIgnoreCase(menuId)) {
                        menuFound = true;
                        menu = (RichMenu)component;
                    }
                }
                if (!menuFound) {
                    // new main menu
                    RichMenu newMenu = new RichMenu();
                    newMenu.setInlineStyle("font-family:Verdana;");
                    newMenu.setId(menuId);
                    newMenu.setText(menuItem.getAnamenuaciklama());
                    newMenu.setIcon(menuItem.getAnamenuikon());
                    initMenu.getChildren().add(newMenu);
                    menu = newMenu;
                }

                Boolean menuItemFound = false;
                String menuItemId = menuItem.getKisayoladi();

                // check if the menu item is already added

                for (Iterator iterator = menu.getChildren().iterator();
                     iterator.hasNext(); ) {
                    UIComponent component = (UIComponent)iterator.next();
                    if (component.getId().equalsIgnoreCase(menuItemId)) {
                        menuItemFound = true;
                    }
                }
                if (!menuItemFound) {
                    RichCommandMenuItem richMenuItem = new RichCommandMenuItem();
                    richMenuItem.setId(menuItemId);
                    richMenuItem.setText(menuItem.getAciklama());
                    richMenuItem.setInlineStyle("font-family:Verdana;");
                    richMenuItem.setActionExpression(getMethodExpression(menuItem.getAction()));
                    richMenuItem.setIcon(menuItem.getIcon());
                    menu.getChildren().add(richMenuItem);
                    
                }
              }
            }
            //menuView.remove();
        }
      }
  
       
      private AppModuleImpl getAm() 
      {
          FacesContext fc = FacesContext.getCurrentInstance();
          Application app = fc.getApplication();
          ExpressionFactory elFactory = app.getExpressionFactory();
          ELContext elContext = fc.getELContext();
          ValueExpression valueExp = elFactory.createValueExpression(elContext, "#{data.AppModuleDataControl.dataProvider}", Object.class);
          return (AppModuleImpl)valueExp.getValue(elContext);
      } 
      private MethodExpression getMethodExpression(String name) 
      {
          Class[] argtypes = new Class[1];
          argtypes[0] = ActionEvent.class;
          FacesContext facesCtx = FacesContext.getCurrentInstance();
          Application app = facesCtx.getApplication();
          ExpressionFactory elFactory = app.getExpressionFactory();
          ELContext elContext = facesCtx.getELContext();
          return elFactory.createMethodExpression(elContext, name, null,
                                                  argtypes);
      }

      public String doLogOut() throws IOException, ServletException
      {
          
          ExternalContext ectx = FacesContext.getCurrentInstance().getExternalContext();
          HttpServletResponse response = (HttpServletResponse)ectx.getResponse();
          HttpServletRequest request =(HttpServletRequest)ectx.getRequest();
          String url = "/adfAuthentication?logout=true&end_url=/faces/login.jspx";  
          FacesContext ctx = FacesContext.getCurrentInstance();
          RequestDispatcher dispatcher = request.getRequestDispatcher(url);
          try 
          {
           dispatcher.forward(request, response);
          } 
          catch (ServletException se) 
          {
        
          }
          catch (IOException ie) 
          {
           
          }
          ctx.responseComplete();

          return null;
      }
        
   
      public void setInitMenu(RichMenuBar initMenu) 
      {
        this.initMenu = initMenu;
      }

      public RichMenuBar getInitMenu() 
      {
       return initMenu;
      }
}
SysmenuicerikViewImpl is a viewobject and query like that;
SELECT Sysmenuicerik.KOD, 
       Sysmenuicerik.ACIKLAMA, 
       Sysmenuicerik.KISAYOLADI, 
       Sysmenuicerik.SIRA, 
       Sysmenuicerik.ACTION, 
       Sysmenuicerik.MENUKOD, 
       Sysmenuicerik.ICON, 
       Sysmenuicerik.OLUSTURMATARIHI, 
       Sysmenuicerik.OLUSTURAN, 
       Sysmenuicerik.DEGISTIRMETARIHI, 
       Sysmenuicerik.DEGISTIREN,
Sysmenu.ACIKLAMA as AnaMenuACIKLAMA,
Sysrol.ACIKLAMA as RolAciklama,
Sysmenu.ikon as AnaMenuIKON
FROM SYSMENUICERIK Sysmenuicerik, ROLMENUILISKILERI Rolmenuiliskileri, SYSMENU Sysmenu, SYSROL Sysrol
WHERE ((Sysmenuicerik.KOD = Rolmenuiliskileri.MENUICERIKKOD) AND (Sysmenuicerik.MENUKOD = Sysmenu.KOD)) AND (Rolmenuiliskileri.ROLID = Sysrol.KOD) order by Sysmenu.SIRA
here is the sample db scripts
CREATE TABLE SYSROL
(
  KOD               NUMBER(10)                  NOT NULL,
  ACIKLAMA          VARCHAR2(30 BYTE)           NOT NULL,
  OLUSTURMATARIHI   DATE                        DEFAULT SYSDATE,
  OLUSTURAN         VARCHAR2(30 BYTE),
  DEGISTIRMETARIHI  DATE,
  DEGISTIREN        VARCHAR2(30 BYTE)
)

CREATE TABLE SYSMENUICERIK
(
  KOD               NUMBER(10)                  NOT NULL,
  ACIKLAMA          VARCHAR2(30 BYTE)           NOT NULL,
  KISAYOLADI        VARCHAR2(30 BYTE),
  SIRA              NUMBER(2),
  ACTION            VARCHAR2(60 BYTE)           NOT NULL,
  MENUKOD           NUMBER(10)                  NOT NULL,
  ICON              VARCHAR2(60 BYTE),
  OLUSTURMATARIHI   DATE                        DEFAULT SYSDATE,
  OLUSTURAN         VARCHAR2(30 BYTE),
  DEGISTIRMETARIHI  DATE,
  DEGISTIREN        VARCHAR2(30 BYTE)
)

CREATE TABLE SYSMENU
(
  KOD               NUMBER(10)                  NOT NULL,
  ACIKLAMA          VARCHAR2(30 BYTE)           NOT NULL,
  SIRA              NUMBER(2),
  KISAYOLADI        VARCHAR2(30 BYTE),
  IKON              VARCHAR2(60 BYTE),
  OLUSTURMATARIHI   DATE                        DEFAULT SYSDATE,
  OLUSTURAN         VARCHAR2(30 BYTE),
  DEGISTIRMETARIHI  DATE,
  DEGISTIREN        VARCHAR2(30 BYTE)
)

CREATE TABLE ROLMENUILISKILERI
(
  KAYITNO           NUMBER(10),
  ROLID             NUMBER(10)                  NOT NULL,
  MENUICERIKKOD     NUMBER(10)                  NOT NULL,
  OLUSTURMATARIHI   DATE                        DEFAULT SYSDATE,
  OLUSTURAN         VARCHAR2(30 BYTE),
  DEGISTIRMETARIHI  DATE,
  DEGISTIREN        VARCHAR2(30 BYTE)
)



in code

richMenuItem.setActionExpression(getMethodExpression(menuItem.getAction()));

come from SYSMENUICERIK action column. column data look like "VergiOran". in page navigation. this action will be called.

after all procces completed. it works fine. see u next post.

Hiç yorum yok:

Yorum Gönder