`
stenlylee
  • 浏览: 261555 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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

阅读更多

本文适合刚开始学习Portal或者想将已有的JSF项目集成进Portal内的人。

 

Portal的应用越来越广泛,特别是Portal 2.0(JSR 286)发布以来。2.0的Portlets允许你灵活集成其他框架与技术编写的程序到同一个Portal中,并且共享权限验证、个性化界面等Portal所有的功能,处理Ajax请求也十分简单。

 

自从JSR 301 Portlet Bridge规范发布以来,JSF等其他程序就能够被集成到Portal中了,无论是Portal 1.0还是2.0,都能够集成第三方程序。涉及到的相关技术例如JSF的生命周期等问题,全部交给Portlet Bridge处理。本教程主要介绍了这方面。同时也会介绍一些JBoss Portal Container 2.0的新特性。

 

本文是一个由三篇文章组成的系列的第一部分。

 

建立项目

Maven:

安装Maven

设置环境变量

 

服务器与相关程序:

JBoss Portal’s Portlet Container 2.0

JBoss Portlet Bridge Beta3

 

目前,JBoss Portlet Bridge是JSR 301的唯一实现。默认的Maven配置是下载JBoss Portal与JBoss AS捆绑版本,你可以单独下载他们(这里)。下载过程可能会要一段时间,下载完成后才能进行下一步。

 

针对其他JBoss Portal版本的配置,参考这里

 

下面的Maven archetype能够让你快速生成开发所需的模板文件以及项目结构。打开命令行终端,执行以下命令:

 

mvn archetype: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,基础源代码都已经生成了,下面只需要打开你的IDE然后导入项目即可开始开发。

 

下面的开发跟基本的JSF项目就没什么不同的了,只有几个地方需要注意的,例如:单点登录、portletContext、以及一些变量的定义如命名空间、portlet的Help模式与Edit模式等。本文不会介绍的太过详细,不过本文会给出一些信息帮助你学习开发portlet。想要了解更多信息,建议先看一下JSR 168JSR 286规范。

 

JBoss Portlet Bridge最酷的地方就是,它不是portlet!它只是JSF与portlet的中介。通过这个中介,你的JSF程序,就等同于一个portlet。你的WEB-INF只需要添加3-4个xml文件和一些jar包,其他都不用改变。这些xml文件如下:

 

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项目内了,你可以直接编译部署运行这个portlet了。

 

1、执行命令:

mvn install cargo:start -Premote-portal -Dpc20

 

启动的时候会看见一些错误,例如FailDuringInitPortlet,这是正常现象。

2、执行命令

在JSF portlet项目的根目录下运行

mvn cargo:deploy -Premote-portal -Dpc20 

 

 

命令行的参数需要指明JBoss AS的路径以及JBoss Portal的版本。详细信息参考这里

 

浏览http://localhost:8080/simple-portal/demo/jsr-301.jsp,可以看到下图画面。

 

 

下面是开发需要注意的几个方面:

 

将portlet看做一般的web程序

 

相关的信息可以在http://localhost:8080/JSFRIPortlet/home.jsf查看。

 

命名空间

 

默认情况下,JSF生成的标签id为form1:myBtn形式,但是在这里,会变成类似:jbpns_2fdefault_2fNews_2fStories_2fStoryTemplateWindow12snpbj:_viewRoot:form1:myBtn

 

你可以使用这种方法来适应这种变化:

document.getElementById('#{facesContext.externalContext.response.namespace}the_rest_of_JSF_ID');

 

但是这样,当你将该程序放到servlet环境下的时候,就会失效。所以更进一步的方法为在backing bean里面增加判断代码来保障不出现问题。

 

preserveActionParams

当preserveActionParams被设置为TRUE的时候,bridge必须管理所有的请求参数,所有的请求参数都被保存在“bridge request scope”。如果这个参数没有设置,或者设置成FALSE,那么所有请求参数都会被保存在portlet request scope里面。

 

<init-param>
    <param-name>javax.portlet.faces.preserveActionParams</param-name>
    <param-value>true</param-value>
<init-param>

 

在页面内使用#{request.yourParam}可以获得该参数。

 

Excluding Attributes from the Bridge Request Scope

When your application uses request attributes on a per request basis and you do not want that particular attribute to be managed in the extended bridge request scope, you must use the following configuration in your faces-config.xml. Below you will see that any attribute namespaced as foo.bar or any attribute beginning with foo.baz(wildcard) will be excluded from the bridge request scope and only be used per that application's request:

 

<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>

 

Or you can use the javax.portlet.faces.annotation.ExcludeFromManagedRequestScope annotation to accomplish the same thing by annotating the object class that you don't want to be included in the request.

 

 

  • 大小: 14.5 KB
  • 大小: 26.8 KB
  • 大小: 25 KB
分享到:
评论

相关推荐

    seam+jsf+richfaces+ajax4jsf 电子书

    Seam、JSF、RichFaces 和 Ajax4jsf 是四个重要的Java Web开发框架和技术,它们在构建现代、交互式Web应用程序中发挥着关键作用。让我们深入探讨这些技术及其结合使用时的知识点。 **1. Seam** Seam是一个开源的Java...

    JSF项目中seam的配置

    Seam 是一个强大的Java EE框架,它主要用于简化JavaServer Faces (JSF)应用程序的开发,同时提供了对EJB 3、CDI(Contexts and Dependency Injection)、Ajax等技术的集成。在JSF项目中配置Seam,可以充分利用其优势...

    jsf+seam+jpa实例

    **JSF、Seam与JPA整合实例详解** 在现代Web应用开发中,JavaServer Faces (JSF)、Seam框架和Java Persistence API (JPA)是三个关键的技术组件。本实例将深入探讨如何利用这三者进行联合开发,帮助开发者实现高效、...

    seam,jsf,ajax4jsf的大全资料集合

    Seam、JSF(JavaServer Faces)和Ajax4jsf是Java Web开发中重要的技术框架,它们在构建富互联网应用程序(Rich Internet Applications, RIA)时发挥着关键作用。这里,我们将深入探讨这三个技术的核心概念、特点以及...

    seam+jsf+richfaces+ajax4jsf打包了

    这个压缩包集合了四个重要的Java Web开发框架,它们分别是Seam、JSF(JavaServer Faces)、RichFaces以及Ajax4jsf。这些技术在构建现代、交互性强的Web应用程序时发挥着关键作用。 **Seam** Seam是一款开源的集成...

    ajax4jsf实例

    Ajax4JSF 是基于JSF 1.x 和 RichFaces 3.x 的一个组件库,旨在简化JSF应用中的Ajax集成。它提供了多种预定义的Ajax行为和组件,使得开发人员能够通过声明式的方式在JSF页面上添加Ajax特性,提高用户体验。 ### 2. ...

    JSF全套(JSF入门教+ LIB+ Ajax4JSF使用手册 )

    本资源包包含了JSF从入门到进阶的多个方面,包括基础教程、核心组件库(LIB)、Ajax4JSF的使用以及项目创建的指导,是学习JSF的宝贵资料。 1. **JSF入门教程**:JSF的基础知识讲解,涵盖了JSF的基本概念、架构和工作...

    ajax4jsf使用中文手册

    这份中文手册详细介绍了如何将Ajax功能与JSF结合使用,使得Web应用程序更为高效且用户友好。 ### 1. Ajax4JSF简介 Ajax4JSF是RichFaces项目的一部分,旨在简化JSF应用中的Ajax开发。它通过在JSF组件上添加Ajax行为...

    Beginning JSF2 APIs and JBoss Seam

    ### 关于《Beginning JSF2 APIs and JBoss Seam》的知识点总结 #### 一、书籍简介与背景 《Beginning JSF2 APIs and JBoss Seam》是一本深入介绍JavaServer Faces 2(简称JSF2)及其相关API以及JBoss Seam框架的...

    ajax4jsf-demo

    这个"ajax4jsf-demo"项目是一个演示了如何在实际应用中利用Ajax4JSF库进行开发的例子。 **1. Ajax 技术** Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术...

    Ajax4jsf 用户手册

    指南可能包含了在Eclipse、NetBeans或其他常用集成开发环境(IDE)中使用Ajax4jsf的步骤。 ### 8. **Exadel VCP和Ajax4jsf** Exadel VCP可能是指Exadel的版本控制平台,可能与Ajax4jsf的版本管理和发布有关。 ### 9...

    ajax4jsf.zip

    3. **Ajax请求和响应**: 使用Ajax4JSF,开发者可以指定Ajax请求的目标处理方法,以及响应返回后更新的DOM元素。这使得页面的交互更加流畅,减少了不必要的页面刷新。 4. **JSF生命周期集成**: Ajax4JSF与JSF的完整...

    jsf seam hibernate 初学者练习

    **JSF、Seam与Hibernate简介** JSF(JavaServer Faces)是Java平台上的一个用于构建用户界面的组件模型框架,它提供了一种声明式的方式来创建动态Web应用程序。JSF的核心概念是组件,这些组件可以组合成用户界面,...

    jsf1.2 source code

    - **数据绑定**:JSF使用EL(Expression Language)将组件属性与模型数据绑定,简化了数据的获取和设置。 - **事件处理**:JSF支持事件模型,允许组件触发和监听自定义事件。 - **国际化与本地化**:JSF内置了支持...

    JSF + ajax入门程序,有注释很多,适用JSF新手

    JSF与Ajax的结合使得开发人员能够构建高效、互动的Web应用。通过理解和掌握Ajax在JSF中的应用,开发者可以创建出更加现代、响应式的用户界面,提升用户满意度。在实际项目中,根据需求选择合适的Ajax库和最佳实践,...

    jboss-ajax4jsf-1.1.1-src

    【标题】"jboss-ajax4jsf-1.1.1-src" 是一个开源项目,主要涉及Ajax4jsf框架的源代码版本,版本号为1.1.1。Ajax4jsf是针对JavaServer Faces (JSF) 技术的一个扩展,它允许开发者在JSF应用中无缝集成Ajax功能,提升...

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版) 1/2

    学会使用Liferay的JSF团队领导开发的JSF和Portlet,Liferay是处于领导地位的JavaPortal开发商。 全面介绍JSF2.0、详述如何使用Ajax,以及按照JSF2.0、的方式构建组件、快速理解众多可以直接运行的代码示例。 作者 ...

    JSF + AJAX开发小例

    **JSF(Apache MyFaces)与AJAX的融合开发详解** JavaServer Faces(JSF)是Java平台上的一个用于构建Web应用程序的MVC(Model-View-Controller)框架。它提供了一种组件化的方式,使得开发者可以更方便地创建用户...

    ajax 4jsf用户指南中文版

    - 设计理念:展示Ajax与JSF结合的优势,如Action监听器、值更改监听器等。 - 可应用于现有JSF项目中,通过组件库添加Ajax功能。 #### 二、开始使用Ajax4jsf - **环境需求**: - JDK1.4或更高版本。 - 任何JSF...

Global site tag (gtag.js) - Google Analytics