⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 portleturlhelper.java

📁 struts 2 核心包 的源码 有错误是难免的
💻 JAVA
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space 
// Source File Name:   PortletUrlHelper.java

package org.apache.struts2.portlet.util;

import com.opensymphony.xwork2.util.TextUtils;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.*;
import javax.portlet.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.StrutsException;
import org.apache.struts2.portlet.context.PortletActionContext;

public class PortletUrlHelper
{

	public static final String ENCODING = "UTF-8";
	private static final Log LOG = LogFactory.getLog(org/apache/struts2/portlet/util/PortletUrlHelper);

	public PortletUrlHelper()
	{
	}

	public static String buildUrl(String action, String namespace, String method, Map params, String type, String mode, String state)
	{
		return buildUrl(action, namespace, method, params, null, type, mode, state, true, true);
	}

	public static String buildUrl(String action, String namespace, String method, Map params, String scheme, String type, String portletMode, String windowState, 
			boolean includeContext, boolean encodeResult)
	{
		StringBuffer resultingAction = new StringBuffer();
		RenderRequest request = PortletActionContext.getRenderRequest();
		RenderResponse response = PortletActionContext.getRenderResponse();
		LOG.debug((new StringBuilder()).append("Creating url. Action = ").append(action).append(", Namespace = ").append(namespace).append(", Type = ").append(type).toString());
		namespace = prependNamespace(namespace, portletMode);
		if (!TextUtils.stringSet(portletMode))
			portletMode = PortletActionContext.getRenderRequest().getPortletMode().toString();
		String result = null;
		int paramStartIndex = action.indexOf('?');
		if (paramStartIndex > 0)
		{
			String value = action;
			action = value.substring(0, value.indexOf('?'));
			String queryStr = value.substring(paramStartIndex + 1);
			String key;
			String val;
			for (StringTokenizer tok = new StringTokenizer(queryStr, "&"); tok.hasMoreTokens(); params.put(key, new String[] {
	val
}))
			{
				String paramVal = tok.nextToken();
				key = paramVal.substring(0, paramVal.indexOf('='));
				val = paramVal.substring(paramVal.indexOf('=') + 1);
			}

		}
		if (TextUtils.stringSet(namespace))
		{
			resultingAction.append(namespace);
			if (!action.startsWith("/") && !namespace.endsWith("/"))
				resultingAction.append("/");
		}
		resultingAction.append(action);
		if (TextUtils.stringSet(method))
			resultingAction.append("!").append(method);
		LOG.debug((new StringBuilder()).append("Resulting actionPath: ").append(resultingAction).toString());
		params.put("struts.portlet.action", new String[] {
			resultingAction.toString()
		});
		PortletURL url = null;
		if ("action".equalsIgnoreCase(type))
		{
			LOG.debug("Creating action url");
			url = response.createActionURL();
		} else
		{
			LOG.debug("Creating render url");
			url = response.createRenderURL();
		}
		params.put("struts.portlet.mode", portletMode);
		url.setParameters(ensureParamsAreStringArrays(params));
		if ("HTTPS".equalsIgnoreCase(scheme))
			try
			{
				url.setSecure(true);
			}
			catch (PortletSecurityException e)
			{
				LOG.error("Cannot set scheme to https", e);
			}
		try
		{
			url.setPortletMode(getPortletMode(request, portletMode));
			url.setWindowState(getWindowState(request, windowState));
		}
		catch (Exception e)
		{
			LOG.error((new StringBuilder()).append("Unable to set mode or state:").append(e.getMessage()).toString(), e);
		}
		result = url.toString();
		if (result.indexOf("&") >= 0)
			result = result.replace("&", "&");
		return result;
	}

	private static String prependNamespace(String namespace, String portletMode)
	{
		StringBuffer sb = new StringBuffer();
		PortletMode mode = PortletActionContext.getRenderRequest().getPortletMode();
		if (TextUtils.stringSet(portletMode))
			mode = new PortletMode(portletMode);
		String portletNamespace = PortletActionContext.getPortletNamespace();
		String modeNamespace = (String)PortletActionContext.getModeNamespaceMap().get(mode);
		LOG.debug((new StringBuilder()).append("PortletNamespace: ").append(portletNamespace).append(", modeNamespace: ").append(modeNamespace).toString());
		if (TextUtils.stringSet(portletNamespace))
			sb.append(portletNamespace);
		if (TextUtils.stringSet(modeNamespace))
		{
			if (!modeNamespace.startsWith("/"))
				sb.append("/");
			sb.append(modeNamespace);
		}
		if (TextUtils.stringSet(namespace))
		{
			if (!namespace.startsWith("/"))
				sb.append("/");
			sb.append(namespace);
		}
		LOG.debug((new StringBuilder()).append("Resulting namespace: ").append(sb).toString());
		return sb.toString();
	}

	public static String buildResourceUrl(String value, Map params)
	{
		StringBuffer sb = new StringBuffer();
		if (!value.startsWith("/"))
			sb.append("/");
		sb.append(value);
		if (params != null && params.size() > 0)
		{
			sb.append("?");
			Iterator it = params.keySet().iterator();
			do
				try
				{
					if (!it.hasNext())
						break;
					String key = (String)it.next();
					String val = (String)params.get(key);
					sb.append(URLEncoder.encode(key, "UTF-8")).append("=");
					sb.append(URLEncoder.encode(val, "UTF-8"));
					if (it.hasNext())
						sb.append("&");
				}
				catch (UnsupportedEncodingException e)
				{
					throw new StrutsException("Encoding UTF-8 not found");
				}
			while (true);
		}
		RenderResponse resp = PortletActionContext.getRenderResponse();
		RenderRequest req = PortletActionContext.getRenderRequest();
		return resp.encodeURL((new StringBuilder()).append(req.getContextPath()).append(sb.toString()).toString());
	}

	public static Map ensureParamsAreStringArrays(Map params)
	{
		Map result = null;
		if (params != null)
		{
			result = new LinkedHashMap(params.size());
			for (Iterator it = params.keySet().iterator(); it.hasNext();)
			{
				Object key = it.next();
				Object val = params.get(key);
				if (val instanceof String[])
					result.put(key, val);
				else
					result.put(key, new String[] {
						val.toString()
					});
			}

		}
		return result;
	}

	private static WindowState getWindowState(RenderRequest portletReq, String windowState)
	{
		WindowState state = portletReq.getWindowState();
		if (TextUtils.stringSet(windowState))
		{
			state = portletReq.getWindowState();
			if ("maximized".equalsIgnoreCase(windowState))
				state = WindowState.MAXIMIZED;
			else
			if ("normal".equalsIgnoreCase(windowState))
				state = WindowState.NORMAL;
			else
			if ("minimized".equalsIgnoreCase(windowState))
				state = WindowState.MINIMIZED;
		}
		if (state == null)
			state = WindowState.NORMAL;
		return state;
	}

	private static PortletMode getPortletMode(RenderRequest portletReq, String portletMode)
	{
		PortletMode mode = portletReq.getPortletMode();
		if (TextUtils.stringSet(portletMode))
		{
			mode = portletReq.getPortletMode();
			if ("edit".equalsIgnoreCase(portletMode))
				mode = PortletMode.EDIT;
			else
			if ("view".equalsIgnoreCase(portletMode))
				mode = PortletMode.VIEW;
			else
			if ("help".equalsIgnoreCase(portletMode))
				mode = PortletMode.HELP;
		}
		if (mode == null)
			mode = PortletMode.VIEW;
		return mode;
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -