与其闭门造车,不如直接开动原装、进口、免费的法拉利。 -- 作者说

不多说废话,直接上代码。

ParamUtil

ParamUtil、GetterUtil是Liferay最重要的帮助类

  • ParamUtil用途:获取PortletRequest的参数值,并作类型转换和判空处理(内部机制是通过GetterUtil)
  • GetterUtil用途:对输入做类型转换、判空处理、赋予默认值(即期望的获取值为空时侯的初始值)

ParamUtil的使用例子1:

public void deleteInterview(
ActionRequest actionRequest, ActionResponse actionResponse)
throws Exception { long interviewId = ParamUtil.getLong(actionRequest, "interviewId");
InterviewLocalServiceUtil.deleteInterview(interviewId); sendRedirect(actionRequest, actionResponse);
}

ParamUtil的使用例子2:

public void updateQuestion(
ActionRequest actionRequest, ActionResponse actionResponse)
throws Exception { long questionId = ParamUtil.getLong(actionRequest, "questionId");
long questionSetId = ParamUtil.getLong(actionRequest, "questionSetId");
String title = ParamUtil.getString(actionRequest, "title");
String description = ParamUtil.getString(actionRequest, "description");
int type = ParamUtil.getInteger(actionRequest, "type"); ServiceContext serviceContext = ServiceContextFactory.getInstance(
actionRequest); try {
if (questionId <= ) {
QuestionLocalServiceUtil.addQuestion(
questionSetId, title, description, type, serviceContext);
}
else {
QuestionLocalServiceUtil.updateQuestion(
questionId, title, description, type, serviceContext);
}
}
catch (Exception e) {
...
} sendRedirect(actionRequest, actionResponse);
}

ParamUtil可以通过get来直接获取PortletRequest参数,如:

public static short get(
PortletRequest portletRequest, String param, short defaultValue) { return GetterUtil.get(portletRequest.getParameter(param), defaultValue);
} public static String get(
PortletRequest portletRequest, String param, String defaultValue) { String returnValue =
GetterUtil.get(portletRequest.getParameter(param), defaultValue); if (returnValue != null) {
return returnValue.trim();
} return null;
}

也可以通过类似getInteger、getLong 获取单一值和获取数组的getIntegerValues、getLongValues之类的方法(用于checkbox的提交)实际都是一样的。

区别是getIntegerValues、getLongValues的返回值是通过调用GetterUtil

public static int getInteger(HttpServletRequest request, String param) {
return GetterUtil.getInteger(request.getParameter(param));
} public static int getInteger(
HttpServletRequest request, String param, int defaultValue) { return get(request, param, defaultValue);
} public static int[] getIntegerValues(
HttpServletRequest request, String param) { return getIntegerValues(request, param, new int[]);
} public static int[] getIntegerValues(
HttpServletRequest request, String param, int[] defaultValue) { return GetterUtil.getIntegerValues(
request.getParameterValues(param), defaultValue);
}

同时,还可以通过print来打印参数输出,方便程序员使用

public static void print(PortletRequest portletRequest) {
Enumeration<String> enu = portletRequest.getParameterNames(); while (enu.hasMoreElements()) {
String param = enu.nextElement(); String[] values = portletRequest.getParameterValues(param); for (int i = ; i < values.length; i++) {
System.out.println(param + "[" + i + "] = " + values[i]);
}
}
}

另外较高版本增加了ServiceContext的参数

static float getFloat(ServiceContext serviceContext, String param, float defaultValue) 

static float[] getFloatValues(ServiceContext serviceContext, String param, float[] defaultValue) 

GetterUtil

GetterUtil的代码,就不具体解释了
可以访问:
https://docs.liferay.com/portal/5.1/javadocs/portal-kernel/com/liferay/portal/kernel/util/GetterUtil.java.html

GetterUtil的使用例子:发送request属性到jsp

//java:

package com.liferay.docs.exampleserviceconsumerportlet;

import java.io.IOException;
import javax.portlet.Portlet;
import javax.portlet.PortletException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet;
import com.liferay.portal.service.UserLocalService;
import com.liferay.bookmarks.service.BookmarksFolderLocalService; @Component(
immediate = true,
property = {
"com.liferay.portlet.display-category=category.sample",
"com.liferay.portlet.instanceable=true",
"javax.portlet.display-name=Example Service Consumer Portlet",
"javax.portlet.init-param.template-path=/",
"javax.portlet.init-param.view-template=/view.jsp",
"javax.portlet.security-role-ref=power-user,user"
},
service = Portlet.class
)
public class ExampleServiceConsumerPortlet extends MVCPortlet { @Override
public void doView(RenderRequest request, RenderResponse response)
throws IOException, PortletException { int userCount = getUserLocalService().getUsersCount();
request.setAttribute("USER_COUNT", userCount); int bookmarksFolderCount =
getBookmarksFolderLocalService().getBookmarksFoldersCount();
request.setAttribute("BOOKMARKS_FOLDER_COUNT", bookmarksFolderCount); super.doView(request, response);
} public BookmarksFolderLocalService getBookmarksFolderLocalService() {
return _bookmarksFolderLocalService;
} public UserLocalService getUserLocalService() {
return _userLocalService;
} @Reference
public void setBookmarksFolderLocalService(
BookmarksFolderLocalService bookmarksFolderLocalService) { _bookmarksFolderLocalService = bookmarksFolderLocalService;
} @Reference
public void setUserLocalService(UserLocalService userLocalService) {
_userLocalService = userLocalService;
} private UserLocalService _userLocalService;
private BookmarksFolderLocalService _bookmarksFolderLocalService;
}

//jsp:

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ page import="com.liferay.portal.kernel.util.GetterUtil" %>
<portlet:defineObjects /> <%
int userCount = GetterUtil.getInteger(renderRequest.getAttribute("USER_COUNT"));
int bookmarksFolderCount = GetterUtil.getInteger(renderRequest.getAttribute("BOOKMARKS_FOLDER_COUNT"));
%> <p>The portal has <%= userCount %> users.</p>
<p>The portal has <%= bookmarksFolderCount %> bookmarks folders.</p>

GetterUtil和ParamUtil的区别是:ParamUtil是解析请求专用类,而GetterUtil是通用的类型转换输出类
使用这两个类ParamUtil、GetterUtil的好处显而易见,如果配合Validator类,像判空、类型转换、验证的大段代码可以大大的省略,非常简洁

Liferay7 BPM门户开发之29: 核心kernel.util包下面的通用帮助类ParamUtil、GetterUtil使用的更多相关文章

  1. Liferay7 BPM门户开发之37: Liferay7下的OSGi Hook集成开发

    hook开发是Liferay客制扩展的一种方式,比插件灵活,即可以扩展liferay门户,也能对原有特性进行更改,Liferay有许多内置的服务,比如用hook甚至可以覆盖Liferay服务. 可作为 ...

  2. Liferay7 BPM门户开发之17: Portlet 生命周期

    Portlet 生命周期 init() =〉 render() =〉 processAction() =〉 processEvent() =〉 serveResource() =〉destroy() ...

  3. Liferay7 BPM门户开发之10: 通用流程实现从Servlet到Portlet(Part1)

    开发目的: 实现通用流程自动化处理(即实现不需要hardcode代码的bpm统一处理后台,仅需要写少量前端html form代码和拖拽设计BPM定义) 既可独立运行或可依托于Liferay或依托其它门 ...

  4. Liferay7 BPM门户开发之12:acitiviti和liferay用户权限体系集成

    写到第12章才出现Liferay的内容,希望可以厚积薄发. 我们的目标是不使用不维护Activiti的用户组织架构,只维护Liferay的体系,这样的好处是非常明显的,即不用做组织架构的同步工作. 原 ...

  5. Liferay7 BPM门户开发之44: 集成Activiti展示流程列表

    处理依赖关系 集成Activiti之前,必须搞清楚其中的依赖关系,才能在Gradle里进行配置. 依赖关系: 例如,其中activiti-engine依赖于activiti-bpmn-converte ...

  6. Liferay7 BPM门户开发之47: 集成Activiti待办已办任务清单和流程启动

    首先增加两个Portlet,分别用于待办处理.流程启动.待办是别人发起的流程,流到自己这里的流程:流程启动用于发起新的流程. 程序文件放置于 在ACtivit中待办概念分两种,1是指派给你的,专门的指 ...

  7. Liferay7 BPM门户开发之41: Expando API入门

    Expando 是liferay的一种自定义表格扩展的方式,从5.0就已存在 , 可以在运行时新建表格\字段\行\值. 这是一种Service Builder之外的轻量级替代扩展方式,不必像Servi ...

  8. Liferay7 BPM门户开发之40: Form表单的Action到Render的数据传递

    在Form提交后的变量,很多情况是要展现在jsp页面中,这时Action到Render的变量传递就非常有用. 例如,您在数据库中添加了学生的详细信息. 为了实现这一需求,先创建Form表单(学生的细节 ...

  9. Liferay7 BPM门户开发之39: Form表单提交的ProcessAction处理

    在v6.2开始后,需要设置<requires-namespaced-parameters>false</requires-namespaced-parameters>  来避免 ...

随机推荐

  1. Python全栈之路---运算符与基本的数据结构

    运算符 一.算术运算符: 练习: + 加法 两个对象相加 1 + 2得到3:'a' + 'b'得到'ab'. - 减法 一个数减去另一个数或者是负数 5 - 3得到2:-2得到一个负数 * 乘法 两个 ...

  2. ZT 趋势移动安全apk

    趋势移动安全 应用截图   应用简介 趋势移动安全( Mobile Security) 是一款专业的Android移动安全软件.利用趋势科技世界领先的云安全技术,保护用户避免被移动恶意程序骚扰,避免个 ...

  3. TortoiseSVN汉化包装了,不管用,仍然是英文菜单

    TortoiseSVN装了后,把对应的汉化包也装了,但不管用,仍然是英文菜单. 想着是因为没有重启的原因,但是重启了再装,仍然看不到中文工菜单. 想了一下,TortoiseSVN汉化包在装的时候,没有 ...

  4. 使用apache和htaccess对目录访问设置密码保护配置教程

    对目录设置密码保护配置说明我们有时候访问某些网站的时候,要求输入用户名和密码才能访问.这是为了保护隐私,只让经过许可的人访问.在本教程中主要介绍两种方法,一种是通过apache httpd.conf配 ...

  5. Python.Scrapy.14-scrapy-source-code-analysis-part-4

    Scrapy 源代码分析系列-4 scrapy.commands 子包 子包scrapy.commands定义了在命令scrapy中使用的子命令(subcommand): bench, check, ...

  6. NET Framework 4.0的安装失败处理

    如果是XP系统,这么做:1.开始——运行——输入cmd——回车——在打开的窗口中输入net stop WuAuServ2.开始——运行——输入%windir%3.在打开的窗口中有个文件夹叫Softwa ...

  7. 不要轻易delete void*指针,这样会隐藏比较多的错误。

    #include<iostream> using namespace std; class Object{ void* data; const int size; const char i ...

  8. POJ3680_Intervals

    给你若干个区间,每个区间有一个权值,你可以选出某些区间,使得在保证没有任何一段的覆盖次数超过k的前提下,总的权值最大. 这个建模真的十分神奇,赞一个. 对于给出的每一个区间,离散化,最终我们可以知道所 ...

  9. 1055: [HAOI2008]玩具取名

    Description 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后 他会根据自己的喜好,将名字中任意一个字母用"WING" ...

  10. PHP裁剪图片并上传完整demo

    日前根据功能需求,要做一个图片裁剪上传的功能,在网上找了好久,找到了这位仁兄写的demo! 下载压缩包