|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
通过视频学习比传统的大课堂学习更适合成人化的学习规律。有人说大课堂气氛好,学习氛围浓,热闹,可以认识很多人。假如你刚入手下手思索使用portal办理计划,大概想懂得把一个新的或现有的JSF使用整合进一个portal情况有多简单,那末本文相对值得你细心研读。
在已往几年中,portals不管是在企业仍是在加强的portlet2.0(JSR286)标准中都失掉了长足开展。新2.0版本的portlets在聚合分歧的使用,并将其出现在统一个页面的分歧窗口方面赋于开辟职员很年夜的自在。别的,它还供应了认证功效,成熟的本性化特征和更好的处置AJAX的现成办法。
JSR301portlet桥接标准(portletbridgespecification)的呈现,使我们具有了运转JSF使用的尺度体例,不管portlets版本是1.0仍是2.0。portlet桥(bridge)能够安排portal的Action/Render范式得当地处置JSF的性命周期。本教程将次要向你展现设置与开辟JSFportlet是何等简单的一件事变,同时还会先容新的JBossPortletContainer2.0及其一些很酷的新特征。
本文是由三部分构成的系列文章的第一篇。该系列文章从基础的JSFportlet和portal常识一向讲到portlet情况中的AJAX和Seam的初级用法。
如今筹办入手下手吧!
项目安装
开辟工具:
要想乐成理论文中的典范就要下载最新版本的Maven(我用的是2.0.9版本)。
安装Maven2.0.9+。
设置Maven二进制版本的情况变量。
例子顶用到的服务器和二进制版本:
JBossPortal’sPortletContainer2.0
JBossPortletBridgeBeta3
今朝,JBossPortletBridge是JSR301标准的独一完成,它同意你运转JSF、RichFaces和Seam的恣意组合。你项目标Maven设置可布置下载打包在一同的JBossAS和JBossPortletContainer2.0,假如你想分离下载它们,能够在此处找到这些文件。不然,就给Maven几分钟让它往自行下载得当的文件。
注重——在以后的2.6.5.SP1版本的JBossPortal中一样能够运转这个portlet,我在本文中利用了JBossPortletContainer2.0,可是桥(bridge)在二者中都能事情。你可经由过程此处懂得令其可在恣意版本的JBossPortal中运转的设置办法。
下述Maven原型(Mavenarchetype)是创立项目标一种浅易体例,能够疾速创建并运转一个启始项目(大概模板项目)。一旦你运转了这些命令,便可取得理论本文示例所需的统统文件。
翻开一个终端窗口并运转以下指令:- mvnarchetype:generate-DarchetypeGroupId=org.jboss.portletbridge.archetypes-DarchetypeArtifactId=1.2-basic-DarchetypeVersion=1.0.0.B3-DgroupId=org.whatever.project-DartifactId=myprojectname-DarchetypeRepository=http://repository.jboss.org/maven2/-Dversion=1.0.0.B3
复制代码 如今,找到你的新建项目地点文件目次(假如你利用的跟下面的例子一样,那末目次名就应当是“myprojectname”),扫瞄个中方才创立的一切文件,你将会看到一个基础Maven文件布局,个中带有合用于本文典范的源码。如今你就能够翻开最喜好的IDE情况,引进这个Maven项目了。
Portlet桥设置请求
从如今入手下手的开辟历程更像是在Servlet天下中开辟JSF使用,分歧的地方在于:处置相似单点登录如许的成绩;诸如定名空间(namespacing)如许的必要portletContext和会见变量的成绩;和portlet中像“Help”和“Edit”如许的窗口形式成绩。我不想在本文报告过量portlet的细节,但我会供应举行基础开辟的需要信息。假如你想懂得更多portlets的信息,请参考JSR168或JSR286标准申明。
JBossPortletBridge对照酷的一点在于它不是一个portlet,它只是portlet和JSF之间的前言。而你的JSF使用则是个portlet,不外除WEB-INF目次下3到4个分外的xml文件和关于bridge的Jar包外,它的其他部分与你的Servlet版本的使用毫无二致。上面几个设置文件是次要区分:
portlet.xml- <portlet>...v<portlet-class>javax.portlet.faces.GenericFacesPortlet</portlet-class><init-param><name>javax.portlet.faces.defaultViewId.view</name><value>/home.xhtml</value></init-param><init-param><name>javax.portlet.faces.defaultViewId.edit</name><value>/jsf/edit.xhtml</value></init-param><init-param><name>javax.portlet.faces.defaultViewId.help</name><value>/jsf/help.xhtml</value></init-param>...</portlet>
复制代码 web.xml- <context-param><param-name>org.ajax4jsf.VIEW_HANDLERS</param-name><param-value>org.jboss.portletbridge.application.FaceletPortletViewHandler</param-value></context-param><context-param><param-name>javax.portlet.faces.renderPolicy</param-name><param-value>ALWAYS_DELEGATE</param-value></context-param>
复制代码 faces-config.xml- <application><view-handler>org.jboss.portletbridge.application.PortletViewHandler</view-handler><state-manager>org.jboss.portletbridge.application.PortletStateManager</state-manager></application>
复制代码 因为上述设置已使用在你方才设定的Maven原型中,因而如今我们就能够编译项目,并在JBossPortal上部署它了。
运转demo程序
编译新项目,并经由过程以下两个步骤完成部署:
步骤1:mvninstallcargo:start-Premote-portal-Dpc20
这行命令将会花上几分钟往下载打在一同的server+portal包,以是在举行下一步骤之前,请耐烦守候直至看到以下内容:
<br>
*注重——在server启动前你还会看到一个PortletException,这很一般,并且它也是PortletContainer2.0示例FailDuringInitPortlet的一部分。
接上去翻开别的一个终端窗口,找到JSFportlet项目标根目次,并运转:
步骤2:mvncargo:deploy-Premote-portal-Dpc20
<br>
命令行参数关照cargo你正在运转的portal版本和JBoss+Portal包地点地位。这个例子一样能够运转于服从JSR168的最新版本JBossPortal2.6.5.SP1中。假如想懂得更多Maven命令及相干信息,你能够参考JBossPortletBridge文档。要检察已部署的JSFportlet情形可会见以下链接:http://localhost:8080/simple-portal/demo/jsr-301.jsp。
<br>
JSFPortlet开辟
如今让我们来懂得将portlet和JSF接洽在一同的手艺。
把你的portlet视作一个一般的Web使用
当把你的使用视作servlet真个Web使用时,portlet桥是通明的。作为portlet开辟职员,一种很好的做法是偶然细心反省一下你的使用以确保正在举行的开辟没有扩展的趋向,由于它将运转在一个portal情况中。要检察此demo使用,大概任何已部署的带有桥的使用,能够会见http://localhost:8080/JSFRIPortlet/home.jsf。
定名空间
在portal情况中桥能够处置JSF的定名空间组合。当你必要在JSF/xhtml标志中利用元素id时,一般情形下在显现的标志中你所看到的是相似‘form1:myBtn’的代码,而现在在桥定名空间中你所看到的将是象:
jbpns_2fdefault_2fNews_2fStories_2fStoryTemplateWindow12snpbj:_viewRoot:form1:myBtn如许的标志。
要克制这一点,你能够在你的Facelets页中使用上面的表达式,来为你的javascript代码事后设天命名空间:
document.getElementById("#{facesContext.externalContext.response.namespace}the_rest_of_JSF_ID");
请注重,由于利用了portletResponse,以是一旦你试图在servlet使用端检察这个页面的时分就会失掉一个非常。为制止这类情形的产生,你必要在你的背景Bean(backingbean)中反省呼应的范例,并为UI分派一个新的、“平安的”定名空间变量。
preserveActionParams
当你的web.xml文件中preserveActionParams值被设置为TRUE时,桥必需卖力保护在portlet举措哀求时代指派的恣意参数,它们被保留在“桥哀求域(bridgerequestscope)”中。当这个属性没有呈现大概值为FALSE时,只在portlet哀求感化域保护举措的哀求参数。- <init-param><param-name>javax.portlet.faces.preserveActionParams</param-name><param-value>true</param-value><init-param>
复制代码 在你的Facelets页面中使用相似#{request.yourParam}如许的代码能够使用这一设置。
扫除桥哀求域中的属性
当你的使用在每次哀求上都要利用哀求属性而你又不想在扩大的桥哀求感化域中办理特别的属性时,你就必需在你的faces-config.xml文件中利用以下的设置了。上面你会看就任何定名空间为foo.bar的属性大概是以foo.baz(通配符)打头的属性城市被从桥哀求感化域中扫除,这些属性只能用在每次哀求傍边:- <application><application-extension><bridge:excluded-attributes><bridge:excluded-attribute>foo.bar</bridge:excluded-attribute><bridge:excluded-attribute>foo.baz.*</bridge:excluded-attribute></bridge:excluded-attributes></application-extension></application>
复制代码 大概你可使用javax.portlet.faces.annotation.ExcludeFromManagedRequestScopej注解,对你不想包括在哀求中的对象类举行注解,也能够到达一样的效果。
停止语
正如你所看到的,JSR301标准不但使得把已存在的JSFweb使用创建成portlet加倍简单,并且还供应给开辟职员一种办理和处置JSF和portlets差别的体例。不外,标准今朝仍处于频仍地评审和订正阶段。写这篇文章时最新的公然版本是EarlyDraftReview3,可是在JSR301专家组外部,对此订正版本又已有良多改善了,对桥对照严重的改善是鄙人一个JBossPortletBridge版本(Beta4)中将会完成的portlet形式导航和形态。
假如想懂得更多项目信息和桥撑持的兼容版本,大概想要介入社区论坛,请会见我们的项目页面和blog。
检察英文原文:DevelopingPortletsusingJSF,Ajax,andSeam(Part1of3)
来自:http://www.infoq.com/cn/articles/jsf-ajax-seam-portlets-pt-1
你通过从书的数量和开发周期及运行速度来证明:net网页编程和ruby要比java简单。 |
|