您的位置:首页 > 其它

取消、隐藏、删除快捷方式图标上的小箭头可以这样来操作

2011-03-09 19:35 603 查看
本文适合刚开始学习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.

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: