jsf标签<p:ajax>_使用JSF,Ajax和Seam开发Portlet(第2部分,共3部分)

jsf标签<p:ajax>

第1部分中 ,我们了解了运行JSF Portlet的基础知识。 我们研究了项目设置,所需的3个基本xml配置以及大多数JSF Portlet开发人员最终将面对的常见开发方法。 现在,我将向您展示如何通过RichFaces组件库使用AJAX增强JSF portlet。

项目设置

开发工具:

要遵循本指南,请下载最新版本的Maven。 (我正在使用2.0.9)
安装Maven 2.0.9+
在路径上设置Maven二进制文件

示例中使用的服务器和二进制文件:
JBoss门户2.7 Beta1
JBoss Portlet Bridge Beta3

上一篇文章中 ,我解释了我们对Maven原型的使用以及如何将要设置的项目通过Maven自动部署到运行JBoss Portal的JBoss Application Server中。 为了便于使用,本文的前几部分故意与上一部分相同。 唯一的更改是实际的项目名称-所有Maven命令均保持不变。 设置RichFaces项目后,您将获得扎实的参考资料和测试基础,可以尝试以下一些代码示例。

现在是时候生成RichFaces项目,检查源代码并简要地逐步进行配置了。 最后,我们将运行演示并查看一些实际的开发任务。

打开一个终端并运行:

mvn archetype:generate
 -DarchetypeGroupId=org.jboss.portletbridge.archetypes
 -DarchetypeArtifactId=richfaces-basic -DarchetypeVersion=1.0.0.B3
 -DgroupId=org.my.project -DartifactId=richfacesproject
 -DarchetypeRepository=http://repository.jboss.org/maven2/
 -Dversion=1.0.0.B3

导航到创建新项目的目录。 如果使用上面的示例,它将是“ richfacesproject ”目录。 环顾四周,浏览刚刚创建的文件。 您将看到本教程的基本Maven文件夹结构及其源代码。 现在也将是启动您喜欢的IDE并导入此Maven项目的好时机。

组态

必须立即进行最少的XML更改,才能立即开始使用RichFaces库中的任何组件。 这些设置是第1部分中提到的原始配置的扩展,因此,我将仅回顾JBoss Portlet Bridge的与JSF相关的配置。

以下设置将根据您的个人需求而有所不同。 为了使本文专注于AJAX Portlet开发,我将仅说明这些选项与Portlet的关系。 有关更多信息,请参阅RichFaces文档的本部分

web.xml

--------------

可以在此处控制显示RichFaces组件所需的脚本和CSS样式。 对于JBoss Portal,我们可以关闭样式和脚本的加载,以便它们仅在门户页面头中加载一次:

<context-param>
     <param-name>org.richfaces.LoadStyleStrategy</param-name>
     <param-value>NONE</param-value>
 </context-param>
 <context-param>
     <param-name>org.richfaces.LoadScriptStrategy</param-name>
     <param-value>NONE</param-value>
 </context-param>
 <context-param>
     <param-name>org.ajax4jsf.RESOURCE_URI_PREFIX</param-name>
     <param-value>rfRes</param-value>
 </context-param>

 <filter>
     <display-name>Ajax4jsf Filter</display-name>
     <filter-name>ajax4jsf</filter-name>
     <filter-class>org.ajax4jsf.Filter</filter-class>
 </filter>

 <filter-mapping>
     <filter-name>ajax4jsf</filter-name>
     <servlet-name>FacesServlet</servlet-name>
     <dispatcher>FORWARD</dispatcher>
     <dispatcher>REQUEST</dispatcher>
     <dispatcher>INCLUDE</dispatcher>
 </filter-mapping>

jboss-portlet.xml

--------------

您可以在此处指定门户页面头中加载的内容。 如您所见,“ rfRes”是我们在web.xml中指定的RESOURCE_URI_PREFIX。 下一步是插入我们的servlet_path / RESOURCE_URI_PREFIX,以访问从类路径提供的RichFaces资源。

以下是正确显示和启用RichFaces组件套件所需的3个文件:

<portlet>
     <portlet-name>ajaxPortlet</portlet-name>
     <header-content>
         <script src="/faces/rfRes/org/ajax4jsf/framework.pack.js" type="text/javascript"></script>
         <script src="/faces/rfRes/org/richfaces/ui.pack.js" type="text/javascript"></script>
         <link rel="stylesheet" type="text/css" href="/faces/rfRes/org/richfaces/skin.xcss"/>
     </header-content>
 </portlet>

运行演示应用程序

现在,我们将使用2个简单的命令启动服务器并部署RichFaces portlet。 在开始之前,我将解释的一件事是本文与一篇文章在JBoss Portal安装中的区别。 在上一篇文章中,我们将其部署到运行轻量级Portlet Container 2.0演示的JBoss App Server。 自从该文章发表以来,我们已经将JBoss Portal 2.7作为Beta发布。 它将旧的JBoss Portal JSR-168实现与新的Portlet 2.0实现结合在一起,使我们能够在标准JBoss Portal项目中运行1.0和2.0 Portlet。 因此,如果跟踪应该使用哪个版本似乎令人困惑,那不是。 请记住,JBoss Portal 2.7是我们必须提供的所有功能的最终组合,而2.6.x是仅支持JSR-168(portlet 1.0)的受支持的稳定发行版。

有关将该演示portlet部署到任何版本的JBoss Portal(beta或稳定版)的更多信息,请阅读此处

步骤1:下载并启动服务器。

http://downloads.sourceforge.net/jboss/jboss-portal-2.7.0.B1-bundled.zip下载带有JBoss Portal 2.7 Beta1的捆绑JBoss App Server。

接下来,确保将下面的“ path_to_bundle_zip”替换为JBoss Portal 2.7软件包的绝对路径并运行:

mvn install cargo:start -Plocal-portal -DJBOSS_ZIP_HOME=/path_to_bundle_zip/jboss-
portal-2.7.0.B1-bundled.zip -DJBOSS_HOME_DIR=jboss-portal-2.7.0.B1-
bundled/jboss-portal-2.7.0.B1

该命令似乎有点冗长,但是它使您有机会打包JBoss App Server和JBoss Portal的任何已修改兼容版本。

一旦看到下面的输出,就可以继续下一步:

步骤2:部署演示应用程序

现在打开第二个终端窗口,并导航到您的“ richfacesproject ”根目录并运行:

mvn cargo:deploy -Plocal-portal -DJBOSS_ZIP_HOME=/path_to_bundle_zip/jboss-
portal-2.7.0.B1-bundled.zip -DJBOSS_HOME_DIR=jboss-portal-2.7.0.B1-bundled/jboss-
portal-2.7.0.B1

不要忘记用正确的路径替换“ path_to_bundle_zip”。

现在,您可以通过http:// localhost:8080 / portal / portal / default / RichFacesEchoPortlet访问RichFaces演示portlet。

RichFaces Portlet开发

从portlet发出AJAX请求时,了解portlet和servlet会话之间的区别很重要。 例如,当用户在portlet内发出AJAX请求时,它使用原始HTTP会话发生,并且该调用无权访问门户网站会话中的对象。 对于此问题,我们实现了一种方法该方法将允许我们访问Portlet会话属性。 它们使用窗口ID值确定范围-例如,如果Portlet将值“ YourObject”放置在Portlet会话中,它将存储为“ javax.portlet.p.XYZ?YourObject”,其中XYZ是窗口ID。

要从用户界面访问windowID或scopeID,可以使用以下命令:

#{facesContext.externalContext.sessionMap['org.jboss.portletbridge.WINDOW_ID_RETRIVER'].windowID}
 #{facesContext.externalContext.sessionMap['org.jboss.portletbridge.WINDOW_ID_RETRIVER'].scopeId}

如您所见, facesContext.externalContext.sessionMap指向基于Portlet的会话对象。 为什么您需要使用这些值? 列举几个例子:

  • 在AJAX请求期间需要门户网站会话中的认证数据时
  • 动态资源生成(图像,脚本等)

其他例子

整个RichFaces库可在工作演示中找到,源代码可在此处下载。 如果不确定组件的配置或认为它在门户网站环境中不起作用,则该项目非常有用。 唯一不可用的组件是文件上载组件。 它计划在9月初的下一个Portlet Bridge版本中提供。

与往常一样,在论坛上提供反馈非常有用且值得欢迎。 有关JBoss Portlet Bridge项目的更多信息,请访问项目页面文档Wiki

翻译自: https://www.infoq.com/articles/jsf-ajax-seam-portlets-pt-2/?topicPageSponsorship=c1246725-b0a7-43a6-9ef9-68102c8d48e1

jsf标签<p:ajax>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值