论坛首页 Java企业应用论坛

在ADF Faces中实现页面模板化

浏览 2771 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-09-05  
 

JSF中模板化页面的方法

JSF 1.1规范中未明确定义如何模板化页面。因JSF的标准VIEW技术是JSP,所以过去使用的一些技术,比如tiles仍然通用,不过要多做一些工作。另外,开源项目facelet (https://facelets.dev.java.net/)则是专门针对JSF环境下的JSP页面的模板化而开发的,理解和使用也都比较方便。这里将要展示的则是另外一个方法,只适合于ADF Faces组件:将pagepanelPage页面对象与后台进行绑定,在后台设置page的内容。

page/panelPage与后台对象绑定

如下代码来自于SRMain.jspx

    <af:document title="#{res['srdemo.browserTitle']}">

      <af:form>

        <af:page title="#{res['srmain.pageTitle']} {userState.currentSvrId}"

                 binding="#{pageTemplateBean.pageTemplate}">

这里把page与后台pageTemplateBeanpageTemplate进行绑定。pageTemplateBean的代码如下:

import javax.faces.application.Application;

import javax.faces.component.UIParameter;

import javax.faces.component.html.HtmlOutputFormat;

import javax.faces.context.FacesContext;

<o:p> </o:p>

import javax.faces.el.MethodBinding;

<o:p> </o:p>

import javax.faces.event.ActionEvent;

<o:p> </o:p>

import oracle.adf.view.faces.component.core.nav.CoreCommandLink;

import oracle.adf.view.faces.component.core.nav.CoreCommandMenuItem;

import oracle.adf.view.faces.component.core.nav.CorePage;

import oracle.adf.view.faces.component.core.output.CoreMessages;

import oracle.adf.view.faces.component.core.output.CoreObjectImage;

import oracle.adf.view.faces.component.core.output.CoreOutputFormatted;

import oracle.adf.view.faces.component.core.output.CoreOutputText;

<o:p> </o:p>

import oracle.srdemo.view.util.JSFUtils;

<o:p> </o:p>

<o:p> </o:p>

public class PageTemplateBean {

<o:p> </o:p>

    private CorePage pageTemplate;

<o:p> </o:p>

    public PageTemplateBean() {

        createPageTemplate();<o:p></o:p>

    }

<o:p> </o:p>

    public void setPageTemplate(CorePage pageTemplate) {

        this.pageTemplate = pageTemplate;

    }

<o:p> </o:p>

    public CorePage getPageTemplate() {

        return pageTemplate;

    }

<o:p> </o:p>

    private void createPageTemplate() {

<o:p> </o:p>

        FacesContext facesContext = FacesContext.getCurrentInstance();

        Application application = facesContext.getApplication();

<o:p> </o:p>

        this.pageTemplate = new CorePage();

<o:p> </o:p>

        pageTemplate.setValueBinding("value",

                                     application.createValueBinding("#{appMenu.model}"));

        pageTemplate.setVar("menuItem");

<o:p> </o:p>

        CoreObjectImage branding = new CoreObjectImage();

        branding.setSource("/images/SRBranding.gif");

        pageTemplate.setBranding(branding);

<o:p> </o:p>

        CoreObjectImage brandingApp = new CoreObjectImage();

        brandingApp.setSource("/images/SRBranding.gif");

        pageTemplate.setBrandingApp(brandingApp);

<o:p> </o:p>

        pageTemplate.setMessages(new CoreMessages());

<o:p> </o:p>

        CoreOutputText appCopyright = new CoreOutputText();

        appCopyright.setValueBinding("value",

                                     application.createValueBinding("#{res['srdemo.copyright']}"));

        pageTemplate.setAppCopyright(appCopyright);

<o:p> </o:p>

<o:p> </o:p>

        CoreOutputText appAbout = new CoreOutputText();

        appAbout.setValue("About");

        pageTemplate.setAppAbout(appAbout);

…<o:p></o:p>

        CoreCommandMenuItem nodeStamp = new CoreCommandMenuItem();

<o:p> </o:p>

        nodeStamp.setValueBinding("text",

                                  application.createValueBinding("#{menuItem.label}"));

        nodeStamp.setValueBinding("type",

                                  application.createValueBinding("#{menuItem.type}"));

        MethodBinding mb = application.createMethodBinding("#{menuItem.getOutcome}", null);

        nodeStamp.setAction(mb);

        nodeStamp.setValueBinding("icon",

                                  application.createValueBinding("#{menuItem.icon}"));

<o:p> </o:p>

        pageTemplate.setNodeStamp(nodeStamp);

    }

}

<o:p> </o:p>

pageTemplateBean类的createPageTemplate方法中,用代码控制的方法逐一建立诸如appCopyrightinfoUser等标准page所具有的facet

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics