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

在上一篇文章的基础上,本文介绍结合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的组件演示,可以再这里下载到。

 

演示效果图:

 

你可能感兴趣的:(Ajax,jboss,JSF,Richfaces,seam)