六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 33|回复: 0

使用JSF、Ajax与Seam开发Portlets 2/3

[复制链接]

升级  87.33%

55

主题

55

主题

55

主题

秀才

Rank: 2

积分
181
 楼主| 发表于 2013-1-23 02:45:06 | 显示全部楼层 |阅读模式
在上一篇文章的基础上,本文介绍结合RichFaces的相关知识。
 
1、执行Maven命令:
 
 
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 
2、web.xml
<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> 
以上配置有部分是为了让RichFaces不要在每个portlet加载的时候都去加载一边CSS和JS文件,在Portal页面加载的时候加载一边就行了。
 
3、jboss-portlet.xml
 
<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> 
这里可以看见,rfRes就是web.xml中出现过的RESOURCE_URI_PREFIX
 
4、运行demo程序
 
与上一篇文章基本相同。
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 
别忘了将path_to_bundle_zip改成你的JBoss AS的地址
 
然后进入刚创建的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 
然后就可以运行JBoss AS,通过地址http://localhost:8080/portal/portal/default/RichFacesEchoPortlet浏览demo项目的效果了。
 
默认情况下,portlet中的Ajax请求是无法获得Portal Session中的数据的,我们需要实现一个方法来做到这一点(http://blog.jboss-portal.org/2007/11/portlet-window-data-scoping.html),最终,你想要存储在Portal Session中的对象为'javax.portlet.p.XYZ?YourObject',其中XYZ为portlet的window ID,YourObject就是你存储的对象。
 
获得界面中的windowID或者scopeID,你可以使用以下代码:
 
#{facesContext.externalContext.sessionMap['org.jboss.portletbridge.WINDOW_ID_RETRIVER'].windowID}#{facesContext.externalContext.sessionMap['org.jboss.portletbridge.WINDOW_ID_RETRIVER'].scopeId} 
在以下情况下你可能会想要获得Portal Session中的对象:
- 使用Ajax进行登录验证
- 动态生成网站资源,例如JS、CSS等
 
所有RichFaces的组件演示,可以再这里下载到。
 
演示效果图:
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表