<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文档的方式存入数据库中的.
分享到:
相关推荐
- 在Eclipse中,通过"Window" -> "Preferences" -> "Server" -> "Runtime Environments"添加你的服务器实例,配置指向Liferay Portal的部署目录。 5. **设置Debug配置** - 在Eclipse的"Run" -> "Debug ...
- 在Liferay IDE中依次点击 `Window` > `Preferences` > `Server` > `Runtime Environments`。 - 点击右侧的 `Add` 按钮,在弹出的选择服务器界面中选择 `Liferay, Inc.` > `Liferay v6.2 CE (Tomcat7)`。 - 选中...
打开Liferay IDE,Window-->Preferences-->Server-->Runtime Environment,点击右边Add…,在弹出的服务器选择里面选择Liferay,Inc-->Liferay v6.1 CE (Tomcat 7),请打“Create a new location server”打上勾。...
将Liferay Portal Source Code和Tomcat Bundle解压到`C:\liferay dev`,并将Tomcat中的`webapps\root`文件夹内容清空。创建一个名为`bundles`的文件夹,将Tomcat拷贝到其中,以符合Liferay的配置要求。 **步骤5:...
本文将详细介绍如何在Eclipse 3.6以上版本中搭建Liferay 6.1的开发环境,并通过图文并茂的方式,指导开发者如何在Eclipse中新建和维护Liferay项目。 #### 二、所需文件准备 在开始搭建之前,请确保已准备好以下...
单击 Windows->Preferences,选择 Liferay->installed Plugin SDKs,单击 Add… 按钮,出现下图,填写 sdk 的 location 和 name,文件夹 D:\liferay\liferay-plugins-sdk-6.1.1 为前面下载的文件 liferay-plugins-...
- 启动Eclipse,进入“Window” -> “Preferences”,选择“Liferay” -> “Installed Plugin SDKs”。 - 点击“Add...”,指定Liferay Plugins SDK的location,即解压后的liferay-plugins-sdk-6.1.1-ce-ga2-...
开发者需要在Eclipse的 Preferences 或者 .settings 目录下配置相应的环境变量。 5. **ANT编译部署** LifeRay使用ANT作为构建工具,通过修改build.xml文件,可以自动化编译、打包和部署LifeRay项目,大大提高了...
在IT行业中,软件开发环境的配置是至关重要的一步,尤其是对于复杂的开源项目,如Liferay。Liferay是一款功能丰富的开源企业门户平台,它允许开发者构建、定制和管理企业级的Web应用。为了对Liferay进行二次开发,...
对于Liferay特定的库,可以考虑使用Liferay IDE插件中的功能自动处理。 #### 四、注意事项 - 在安装过程中,确保网络连接稳定,避免安装失败或中断。 - 安装完成后,建议检查Eclipse和Liferay IDE插件的版本兼容...
2. **配置Runtime Environment**,在`Window` -> `Preferences`中设置Liferay Portal的运行环境。 3. **创建新项目**:选择`New` -> `Liferay Project`,输入项目名称如“StrutsLiferayTest”。然后将Struts2的jar包...
**设置SDK路径**:通过`Window > Preferences > Liferay > Installed SDKs`打开SDK安装界面。 3. **添加SDK**:点击`Add`按钮,选择Liferay Plug-ins SDK所在的目录。 4. **确认设置**:点击`OK`确认配置信息。 ...
2. 配置Liferay服务器:在Eclipse的"Window" -> "Preferences" -> "Liferay"中,指定你的Liferay Portal实例路径,如"C:\liferay\iferay-portal-6.x-ce-gaX",并设置相应的服务器版本。 五、使用Liferay IDE 1. ...
在MyEclipse的首选项设置中,选择Window > Preferences > MyEclipse > Application Servers,禁用其他应用服务器,启用Tomcat5,并设置Tomcat的主目录为解压缩后的路径。 完成以上步骤后,你将拥有一个基本的...
在Eclipse中,选择“Window” > “Preferences” > “Liferay” > “SDKs”,然后添加你下载的Liferay Plugins SDK的路径。 3. 配置Liferay Portal RunTime Server。在Eclipse的“Servers”视图中,右键点击选择...
JSR 286还引入了Portlet Preferences API,让portlet可以保存和恢复用户的偏好设置,进一步提升用户体验。 Portlet的工作流程主要包括以下几个步骤: 1. 初始化:portlet在部署到门户服务器后首次被调用时进行初始...
- 用户可以根据需要定制portlet的参数,这些偏好可以存储在portlet-preferences中,允许portlet动态地适应用户需求。 6. **portlet的MIME类型和portlet模式**: - MIME类型定义了portlet可以处理的数据类型,而...