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

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

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. Spark Streaming

    Spark Streaming Spark Streaming 是Spark为了用户实现流式计算的模型. 数据源包括Kafka,Flume,HDFS等. DStream 离散化流(discretize ...

  2. 新手入门Java需要注意的问题

    学习编程,虽然有老师教,但是更重要的事自学.这是很重要的. 现在互联网上面资源太多了,这也就有一个问题:怎么才能在一定时间内学习该知识,掌握该技能呢? 理论联系实践! 学以致用!! 网上的资源太多了, ...

  3. Android自动化预备(下)

    上次说道:要具备的一些知识,还有多ADB得理解 本次继续ADB理解: AndroidDebugBridge debugBridge =AndroidDebugBridge.createBridge(& ...

  4. JSON的故事

    1.介绍JSON http://www.json.org/ https://developer.mozilla.org/zh-CN/docs/JSON 2.json的序列化和反序列化 序列化方法 va ...

  5. Linux如何学习

    一:如何提问 1. 尝试自己解决 帮助文档 示例 2. 提问的要求 问题要详细(能被别人看懂, 一个知识点) 报错信息(截图) 二:1.Linux区分大小写 2.所有内容以文件形式保存,包括硬件(一切 ...

  6. tp 展示页面的后台框架

    基于郭河系统的tp后台管理系统 1.navicat的数据库建立: 1.1 新建数据库: 输入数据库名. 字符集 utf8. 排列规则 utf8 generai ci. 1.2新建表: id是个好习惯. ...

  7. 互联网云生态下DDOS安全产品的一些考虑和测试方法(一)

    DDOS攻击简介 安全的三要素——“保密性”.“完整性”和“可用性”中,DOS(Denial of Service拒绝服务攻击)所针对的目标是服务的“可用性”.这种攻击方式利用目标系统的网络服务功能缺 ...

  8. php错误级别的设置方法

    PHP在运行时, 针对严重程度不同的错误,会给以不同的提示. eg:在$a没声明时,直接相加,值为NULL,相加时当成0来算.但是,却提示NOTICE,即注意. 我们在开发中, 为了程序的规范性,把报 ...

  9. mysql数据库查询pdo的用法

    最早的php对mysql数据库查询是mysql和mysqli方法,后来php的新版本进一步封住了该方法,于是又pdo,抛开php框架,使用pdo查询数据,使用也是相当简便 <?php ini_s ...

  10. java动态代理模式

    java动态代理机制详解 Spring的核心AOP的原理就是java的动态代理机制. 在java的动态代理机制中,有两个重要的类或接口: 1.InvocationHandler(Interface): ...