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.