在Liferay中PortletPreferences的使用

在Liferay中,如果能用好PortletPreferences那么会非常强大:

简介:

PortletPreferences是和当前用户相关的一组信息的结合,我们可以让一个已登陆用户在一个Portlet 的不同页面,不同阶段通过这个PortletPreferences来共享数据,而无需担心其他用户去窃取这些数据。利用 这个共享数据的好处是它不需要特定的实体存储,比如数据库,文件。

PortletPreferences分为2种, 一种是静态的,一种是动态的.

静态的PortletPreference就是写在portlet.xml文件中的,如下:

<portlet-preferences>
 <preference>
      <name>department</name>
      <value>liferay</value>
   </preference> 

    <preference>
<name>company</name>
      <value>cignex</value>
   </preference>
</portlet-preferences>

我们在页面或者java代码中,可以用如下的代码来获取:

PortletPreferences preferences = renderRequest.getPreferences();
String department = preferences.getValue("departmentt", "");

动态PortletPreferences就强 大太多了,举一个简单的需求,比如我们要在Portlet的configure模式吧一些参数设置进去,比如REST请求 url,还有一些头参数等,然后我们要在view模式吧这些信息读取出来。

那么,我们可以这样做:

首先,自定义一个Helper类,比如叫PortletHelper,它定义一个静态方法叫getPortletPreference ():

public static PortletPreferences getPortletPreferences(ActionRequest actionRequest) 

throws PortalException, SystemException{
PortletPreferences preferences = actionRequest.getPreferences();
String portletResource = ParamUtil.getString(actionRequest, "portletResource");
if (Validator.isNotNull(portletResource)) {
 preferences = PortletPreferencesFactoryUtil.getPortletSetup(actionRequest, portletResource);
}
return preferences;
 }

然后我们在config模式中新建一个PortletPreferences对象,然后把必要的内容填充进去:

public void processAction(PortletConfig portletConfig, 

                                   ActionRequest actionRequest, ActionResponse actionResponse) 

                                   throws Exception { 

                if(LOGGER.isDebugEnabled()){ 

                  LOGGER.debug("ConfigurationAction : processAction()"); 

             } 

       PortletPreferences preferences = PortletHelper.getPortletPreferences(actionRequest); 

     try{ 

          FileOperationHelper.uploadFileToDest(actionRequest); 

          preferences.setValue(RS_LAUNCH_PORTLET_PREFERENCE_HTML_URL, ConfigurationActionHelper.getHtmlUrl(actionRequest)); 

          preferences.setValue(RS_LAUNCH_PORTLET_PREFERENCE_REST_WS_URL, ConfigurationActionHelper.getRestUrl(actionRequest)); 

          preferences.setValue(RS_LAUNCH_PORTLET_PREFERENCE_REST_WS_TYPE, ConfigurationActionHelper.getRestType(actionRequest)); 

          preferences.setValue(SERVICE_VERSION, ConfigurationActionHelper.getRestVersion(actionRequest)); 

          preferences.setValue(SERVICE_ENV, ConfigurationActionHelper.getRestEnv(actionRequest)); 

         preferences.setValue(CONSUMER_AUTH_TOKEN, ConfigurationActionHelper.getRestToken(actionRequest)); 

          preferences.setValue(CONSUMER_ID, ConfigurationActionHelper.getRestConId(actionRequest)); 

          preferences.store();
..

最后我们在view模式中使用存储在PortletPreferences中的内容:

@RenderMode(name = 

RS_LAUNCH_PORTLET_RENDER_MODE_VIEW)
         public void view(RenderRequest renderRequest, RenderResponse renderResponse)
                          throws PortletException, IOException, PortalException,
                          SystemException {
                 String jsp = null; 

                 if (LOGGER.isDebugEnabled()) {
                          LOGGER.debug("RSLaunchPortlet : view()");
                 }
                 PortletHelper.createActionUrls(renderRequest, renderResponse); 

                 String portletInstanceId = (String) renderRequest
                                   .getAttribute(RS_LAUNCH_PORTLET_RENDER_REQUEST_ATTRIBUTE_PORTLET_ID); 

                 PortletPreferences preferences = renderRequest.getPreferences();
                 String html_url = preferences.getValue(
                                   RS_LAUNCH_PORTLET_PREFERENCE_HTML_URL, StringPool.DOUBLE_QUOTE);
                 String rest_url = preferences.getValue(
                                   RS_LAUNCH_PORTLET_PREFERENCE_REST_WS_URL,
                                   StringPool.DOUBLE_QUOTE );

..

这就达到了在与某个用户指定的Portlet之内共享部分数据的功能,还是很简单的。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, setvalue
Preferences
liferay portlet 开发、liferay mvcportlet、liferay portlet 跳转、liferay portlet、liferay portlet 样式,以便于您获取更多的相关知识。

时间: 2024-10-02 09:58:03

在Liferay中PortletPreferences的使用的相关文章

Liferay中如何使用自定义主题

Liferay中让门户网站使用自己的theme(主题)是十分简单的事情,步骤如下: (1) 在Dock-bar中依 次选择Manage->Page Layout->Look and Feel (2)  然后选择 "define a specific look and feel for this page" (3) 然后选择我们自定义的theme (比如,我们开发了一个名称叫demo- theme的主题并且已经将其部署到Liferay服务器上) (4) 最后保存,关闭pop-

在Liferay中加入自定义的js库文件

在Liferay中,如果我们要让服务器上使用自己的js库(比如ext-js库)而不是使用默认的aui库,可以按照下面的步骤做: (1)放置库文件 我们到$liferay_home/tomcat-7.0.23/webapps/ROOT/html/js 目录下建一个目录叫extjs,然后把ext-all.js复制进去. (2) 在$liferay_home目录下创建portal-ext.properties ,然后从portal-impl.jar 包中的portal.properties中吧java

Liferay中在页面上进行权限控制

在Liferay中,如果我们想要在页面上进行权限控制,比如只有指定权限的用户能看到一些内容,那么我们可以用Liferay预定义的user对象来获取这个对象所拥有的权限,然后再控制页面的显示. 为了在liferay页面上使用user对象,我们必须加入标记库: <liferay-theme:defineObjects/> 然后我们可以在页面上,直接使用user对象,来控制权限,比如我们可以将当前用户是否为管理员用户的存入到一个布尔变量中,如下: <!-- charles:determine

Liferay中portlet.xml中安全控制

在portlet中都有portlet.xml,我们都可以看到下面关于安全设定对应的代码: .. <security-role-ref> <role-name>administrator</role-name> </security-role-ref> <security-role-ref> <role-name>guest</role-name> </security-role-ref> <securit

Liferay中的性能调优

Liferay默认是没有开启调优参数的,所以运行比较慢,我们可以开一些参数从而获得更好的性能: 今天我做了如下的配置: (1) 在$LIFERAY_HOME/portal-ext.properties中配置了以下参数: last.modified.check=false theme.css.fast.load=true javascript.fast.load=true (2) 我们把$LIFERAY_HOME/<tomcat_home>/webapps/ROOT/web.xml中所有的过滤器

在Liferay中创建一个JSP Portlet,但是这个插件显示不出来??

问题描述 我已经配置好环境了,然后自己测试开发的jspportlet,以下是步骤:配置文件是:-extext-webdocrootWEB-INFportlet-ext.xml<!--MYFirstJSPPortlet--><portlet><portlet-name>My_JSP_Portlet</portlet-name><display-name>JSPPortlet</display-name><portlet-class

Portal开源实现-Liferay的Portlet Session处理(2)

session 二.LIFERAY中的实现 LIFERAY在构建ActionRequestImpl和RenderRequestImpl时,会设置PORTLET SESSION,如下代码所示:public RenderRequestImpl(HttpServletRequest req, Portlet portlet,        CachePortlet cachePortlet,        PortletContext portletCtx,        WindowState wi

在liferay中用serveResource解决跨域访问问题

简介: 众所周知,跨域问题是十分常见的需求,比如让客户端的ext-js控件可以渲染来自服务器端的json对象.我们可以用很多很多方法来解决,比如jsonP.但是,在liferay中,我们可以用serveResource方法来优雅的解决跨域访问问题. 白板分析: 以下是摘自我在技术讨论会上的白板: 解决方法: 首先编写一段serveResource方法,让其和远端的json对象打交道,它作为中间层可以封装来在远程的json资源,然后提供给本域内的ext-js代码来渲染. 当然了,这里我们的资源必须

Liferay的安装与使用

一.Liferay的安装与使用 目前liferay的最新版本是liferay portal 7.0.5,下载地址:http://sourceforge.net/projects/lportal/ : 这里下载的是liferay与tomcat6绑定的版本,而且自带jdk1.6,下载完后需要做以下几个步骤便可轻松跑起来liferay了. 1.下载完后最好找个文件夹专门用来做liferay的工作空间,因为以后好多文件下载,这样方便管理. Unzip liferay-portal-tomcat-6.0.