您的位置:首页 > Web前端

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

2016-11-11 13:29 483 查看
与其闭门造车,不如直接开动原装、进口、免费的法拉利。 -- 作者说

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

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 <= 0) {
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[0]);
}

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 = 0; 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类,像判空、类型转换、验证的大段代码可以大大的省略,非常简洁
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: