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

liferay中的preferences处理

阅读更多

<div>
<script type="text/javascript"><!--
google_ad_client = "pub-7593383990029668";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
//2007-06-29: yq-首页上方通栏
google_ad_channel = "6988582798";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>

在JSR168规范中,允许使用preferences来存储portlet的一些初始信息,preferences的内容在portlet.xml来设置.
在liferay中,对preferences加入了数据库持久化功能,并且可针对company, layout, portlet instance和user的不同组合来定制.

首先来看看在jsp页面上如何访问preferences.

/html/portal/render_portlet.jsp  - Portlet输出页面。
 
 Portlet portlet = (Portlet)request.getAttribute(WebKeys.RENDER_PORTLET);

 CachePortlet cachePortlet = PortletInstanceFactory.create(portlet, application);

 // 读取preferences.
 PortletPreferences portletPrefs = PortletPreferencesLocalServiceUtil.getPreferences(
  company.getCompanyId(), PortletPreferencesFactory.getPortletPreferencesPK(request, portletId));

 // 创建PortletConfig.
 PortletConfig portletConfig = PortletConfigFactory.create(portlet, application);
 PortletContext portletCtx = portletConfig.getPortletContext();

 HttpServletRequest originalReq = PortalUtil.getOriginalServletRequest(request);

 // 创建RenderRequest.
 RenderRequestImpl renderRequestImpl = RenderRequestFactory.create(
  originalReq, portlet, cachePortlet, portletCtx, windowState, portletMode, portletPrefs, plid);

 StringServletResponse stringServletRes = new StringServletResponse(response);

 // 创建RenderResponse.
 RenderResponseImpl renderResponseImpl = RenderResponseFactory.create(
  renderRequestImpl, stringServletRes, portletId, company.getCompanyId(), plid);

 // setAttribute(WebKeys.JAVAX_PORTLET_CONFIG, portletConfig);
 // setAttribute(WebKeys.JAVAX_PORTLET_REQUEST, renderRequestImpl);
 // setAttribute(WebKeys.JAVAX_PORTLET_RESPONSE, renderResponseImpl);
 renderRequestImpl.defineObjects(portletConfig, renderResponseImpl);

 if (portlet.isActive() && access) {
  try {
   cachePortlet.render(renderRequestImpl, renderResponseImpl);
  }
  catch (UnavailableException ue) {
   portletException = true;
   PortletInstanceFactory.destroy(portlet);
  }
 }

PortletPreferencesPK 为preferences的主键,它由portletId, layoutId和ownerId三部分标识.

com.liferay.portal.service.impl.PortletPreferencesLocalServiceImpl

 // getPreferences.
 public javax.portlet.PortletPreferences getPreferences(
  String companyId, PortletPreferencesPK pk)
 throws PortalException, SystemException {

 // 读取prefs缓存.
 Map prefsPool = PortletPreferencesLocalUtil.getPreferencesPool(
  pk.ownerId);

 PortletPreferencesImpl prefs =
  (PortletPreferencesImpl)prefsPool.get(pk);

 if (prefs == null) {
  PortletPreferences portletPreferences = null;
  // 读取portlet.
  Portlet portlet = PortletLocalServiceUtil.getPortletById(
   companyId, pk.portletId);

  try {
   // 从数据库里读preferences.
   portletPreferences =
    PortletPreferencesUtil.findByPrimaryKey(pk);
  }
  catch (NoSuchPortletPreferencesException nsppe) {
   portletPreferences = PortletPreferencesUtil.create(pk);

   if (portlet == null) {
    // 设置系统默认的preferences.
    portletPreferences.setPreferences(
     Portlet.DEFAULT_PREFERENCES);
   }
   else {
    // 设置portlet.xml中定义的preferences.
    portletPreferences.setPreferences(
     portlet.getDefaultPreferences());
   }

   PortletPreferencesUtil.update(portletPreferences);
  }

  prefs = PortletPreferencesSerializer.fromXML(
   companyId, pk, portletPreferences.getPreferences());

  prefsPool.put(pk, prefs);
 }

 return (PortletPreferencesImpl)prefs.clone();
 }
上面的代码首先从缓存中读取,如没有则从数据库读取,
如数据库中还没有相应的记录,则读取默认值并更新到数据库中.

PortletPreferencesFactory

另外一个获取preferences的方式是通过PortletPreferencesFactory,它提供了更方便的获取preferences的方法.

getPortalPreferences(HttpServletRequest req); // 通过HttpServletRequest获取

getPortalPreferences(ActionRequest req); // 通过ActionRequest获取

getPortalPreferences(RenderRequest req);  // 通过RenderRequest获取
在getPortalPreferences方法中,读取preferences的任务还是交给PortletPreferencesLocalServiceImpl,
只是在没有登录时,preferences被存储在httpsession中以便共享.

getPreferences(HttpServletRequest req);
与上面三个方法不同,这个方法直接读取RenderRequest的preferences.

getPreferencesValidator(Portlet portlet);
获取preferences的验证对象.


liferay中proferences的保存.

在liferay中,调用preferences的store就可以保存proferences到数据库了,

    public void store() throws IOException, ValidatorException {
 Portlet portlet = PortletLocalServiceUtil.getPortletById(
  _companyId, _pk.portletId);

 if (!_pk.portletId.equals(PortletKeys.LIFERAY_PORTAL)) {
  PreferencesValidator prefsValidator =
   PortalUtil.getPreferencesValidator(portlet);

                // 验证数据
  if (prefsValidator != null) {
   prefsValidator.validate(this);
  }
 }

        // 更新preferences
 PortletPreferencesLocalServiceUtil.updatePreferences(_pk, this);
    }

 proferences是以xml文档的方式存入数据库中的.

分享到:
评论

相关推荐

    liferay如何在eclipse中配置开发和debug环境

    - 在Eclipse中,通过"Window" -&gt; "Preferences" -&gt; "Server" -&gt; "Runtime Environments"添加你的服务器实例,配置指向Liferay Portal的部署目录。 5. **设置Debug配置** - 在Eclipse的"Run" -&gt; "Debug ...

    liferay环境的搭建

    - 在Liferay IDE中依次点击 `Window` &gt; `Preferences` &gt; `Server` &gt; `Runtime Environments`。 - 点击右侧的 `Add` 按钮,在弹出的选择服务器界面中选择 `Liferay, Inc.` &gt; `Liferay v6.2 CE (Tomcat7)`。 - 选中...

    Liferay开发指南

    打开Liferay IDE,Window--&gt;Preferences--&gt;Server--&gt;Runtime Environment,点击右边Add…,在弹出的服务器选择里面选择Liferay,Inc--&gt;Liferay v6.1 CE (Tomcat 7),请打“Create a new location server”打上勾。...

    liferay开发环境搭建

    将Liferay Portal Source Code和Tomcat Bundle解压到`C:\liferay dev`,并将Tomcat中的`webapps\root`文件夹内容清空。创建一个名为`bundles`的文件夹,将Tomcat拷贝到其中,以符合Liferay的配置要求。 **步骤5:...

    liferay6.1,Eclipse3.6开发环境搭建

    本文将详细介绍如何在Eclipse 3.6以上版本中搭建Liferay 6.1的开发环境,并通过图文并茂的方式,指导开发者如何在Eclipse中新建和维护Liferay项目。 #### 二、所需文件准备 在开始搭建之前,请确保已准备好以下...

    Liferay_Portal_6.1源码导入到eclipse

    单击 Windows-&gt;Preferences,选择 Liferay-&gt;installed Plugin SDKs,单击 Add… 按钮,出现下图,填写 sdk 的 location 和 name,文件夹 D:\liferay\liferay-plugins-sdk-6.1.1 为前面下载的文件 liferay-plugins-...

    Liferay_Portal_6[1].1源码部署

    - 启动Eclipse,进入“Window” -&gt; “Preferences”,选择“Liferay” -&gt; “Installed Plugin SDKs”。 - 点击“Add...”,指定Liferay Plugins SDK的location,即解压后的liferay-plugins-sdk-6.1.1-ce-ga2-...

    LifeRay_Portal6.0.6学习手册

    开发者需要在Eclipse的 Preferences 或者 .settings 目录下配置相应的环境变量。 5. **ANT编译部署** LifeRay使用ANT作为构建工具,通过修改build.xml文件,可以自动化编译、打包和部署LifeRay项目,大大提高了...

    Liferay配置二次开发环境——Eclipse

    在IT行业中,软件开发环境的配置是至关重要的一步,尤其是对于复杂的开源项目,如Liferay。Liferay是一款功能丰富的开源企业门户平台,它允许开发者构建、定制和管理企业级的Web应用。为了对Liferay进行二次开发,...

    liferay6.1Eclipse3.6开发环境搭建

    对于Liferay特定的库,可以考虑使用Liferay IDE插件中的功能自动处理。 #### 四、注意事项 - 在安装过程中,确保网络连接稳定,避免安装失败或中断。 - 安装完成后,建议检查Eclipse和Liferay IDE插件的版本兼容...

    liferay_Struts2_Demo开发

    2. **配置Runtime Environment**,在`Window` -&gt; `Preferences`中设置Liferay Portal的运行环境。 3. **创建新项目**:选择`New` -&gt; `Liferay Project`,输入项目名称如“StrutsLiferayTest”。然后将Struts2的jar包...

    基于Liferay应用程序开发指南

    **设置SDK路径**:通过`Window &gt; Preferences &gt; Liferay &gt; Installed SDKs`打开SDK安装界面。 3. **添加SDK**:点击`Add`按钮,选择Liferay Plug-ins SDK所在的目录。 4. **确认设置**:点击`OK`确认配置信息。 ...

    liferay-ide-eclipse-windows-x64-2.2.4-ga5-201507230603.zip

    2. 配置Liferay服务器:在Eclipse的"Window" -&gt; "Preferences" -&gt; "Liferay"中,指定你的Liferay Portal实例路径,如"C:\liferay\iferay-portal-6.x-ce-gaX",并设置相应的服务器版本。 五、使用Liferay IDE 1. ...

    使用Liferay搭建开发环境.docx

    在MyEclipse的首选项设置中,选择Window &gt; Preferences &gt; MyEclipse &gt; Application Servers,禁用其他应用服务器,启用Tomcat5,并设置Tomcat的主目录为解压缩后的路径。 完成以上步骤后,你将拥有一个基本的...

    LiferayPortal6.0开发环境搭建[参照].pdf

    在Eclipse中,选择“Window” &gt; “Preferences” &gt; “Liferay” &gt; “SDKs”,然后添加你下载的Liferay Plugins SDK的路径。 3. 配置Liferay Portal RunTime Server。在Eclipse的“Servers”视图中,右键点击选择...

    Portlet规范介绍.rar

    JSR 286还引入了Portlet Preferences API,让portlet可以保存和恢复用户的偏好设置,进一步提升用户体验。 Portlet的工作流程主要包括以下几个步骤: 1. 初始化:portlet在部署到门户服务器后首次被调用时进行初始...

    portlet开发手册

    - 用户可以根据需要定制portlet的参数,这些偏好可以存储在portlet-preferences中,允许portlet动态地适应用户需求。 6. **portlet的MIME类型和portlet模式**: - MIME类型定义了portlet可以处理的数据类型,而...

Global site tag (gtag.js) - Google Analytics