锁定老帖子 主题:在ADF Faces中实现页面模板化
精华帖 (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组件:将page或panelPage页面对象与后台进行绑定,在后台设置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与后台pageTemplateBean的pageTemplate进行绑定。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方法中,用代码控制的方法逐一建立诸如appCopyright、infoUser等标准page所具有的facet。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 2773 次