在ADF Faces中实现页面模板化

 
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值