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

📄 actionresponseimpl.java

📁 GridSphere 门户 提供一个基于 portlet 的高级开放源代码门户。GridSphere 是在欧盟提供基金的 GridLab 项目下开发的
💻 JAVA
字号:
/* * @author <a href="mailto:novotny@gridsphere.org">Jason Novotny</a> * @version $Id: ActionResponseImpl.java 4889 2006-06-28 18:36:43Z novotny $ */package org.gridsphere.portlet.impl;import javax.portlet.*;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.util.*;/** * The <CODE>ActionResponse</CODE> interface represents the portlet * response to an action request. * It extends the <CODE>PortletResponse</CODE> interface to provide specific * action response functionality to portlets.<br> * The portlet container creates an <CODE>ActionResponse</CODE> object and * passes it as argument to the portlet's <CODE>processAction</CODE> method. * * @see ActionRequest * @see PortletResponse */public class ActionResponseImpl extends PortletResponseImpl implements ActionResponse {    /**     * Is it still allowed to invoke the method sendRedirect() ?     */    boolean isRedirectAllowed = true;    private boolean redirected = false;    private String redirectLocation = null;    protected Map<String, String[]> renderParams = null;    /**     * Constructs an instance of SportletResponse using an     * <code>HttpServletResponse</code> as a proxy     *     * @param req the <code>HttpServletRequest</code>     * @param res the <code>HttpServletResponse</code>     */    public ActionResponseImpl(HttpServletRequest req, HttpServletResponse res) {        super(req, res);        renderParams = new HashMap<String, String[]>();    }    /**     * Sets the window state of a portlet to the given window state.     * <p/>     * Possible values are the standard window states and any custom     * window states supported by the portal and the portlet.     * Standard window states are:     * <ul>     * <li>MINIMIZED     * <li>NORMAL     * <li>MAXIMIZED     * </ul>     *     * @param windowState the new portlet window state     * @throws WindowStateException  if the portlet cannot switch to the specified window state.     *                               To avoid this exception the portlet can check the allowed     *                               window states with <code>Request.isWindowStateAllowed()</code>.     * @throws IllegalStateException if the method is invoked after <code>sendRedirect</code> has been called.     * @see WindowState     */    public void setWindowState(WindowState windowState)            throws WindowStateException, IllegalStateException {        if (redirected) {            throw new IllegalStateException("cannot invoke setWindowState after sendRedirect has been called");        }        PortalContext portalContext = (PortalContext)req.getAttribute(SportletProperties.PORTAL_CONTEXT);        if (portalContext != null) {            Enumeration e = portalContext.getSupportedWindowStates();            boolean found = false;            while (e.hasMoreElements() && (!found)) {                WindowState s = (WindowState) e.nextElement();                if (s.toString().equalsIgnoreCase(windowState.toString())) {                    found = true;                }            }            if (!found) throw new WindowStateException("Unsupported window state!", windowState);        } else {            throw new IllegalStateException("No PortalContext found!");        }        isRedirectAllowed = false;        req.setAttribute(SportletProperties.PORTLET_WINDOW, windowState);    }    /**     * Sets the portlet mode of a portlet to the given portlet mode.     * <p/>     * Possible values are the standard portlet modes and any custom     * portlet modes supported by the portal and the portlet. Portlets     * must declare in the deployment descriptor the portlet modes they     * support for each markup type.     * Standard portlet modes are:     * <ul>     * <li>EDIT     * <li>HELP     * <li>VIEW     * </ul>     * <p/>     * Note: The portlet may still be called in a different window     * state in the next render call, depending on the portlet container / portal.     *     * @param portletMode the new portlet mode     * @throws PortletModeException  if the portlet cannot switch to this portlet mode,     *                               because the portlet or portal does not support it for this markup,     *                               or the current user is not allowed to switch to this portlet mode.     *                               To avoid this exception the portlet can check the allowed     *                               portlet modes with <code>Request.isPortletModeAllowed()</code>.     * @throws IllegalStateException if the method is invoked after <code>sendRedirect</code> has been called.     */    public void setPortletMode(PortletMode portletMode)            throws PortletModeException {        if (redirected) {            throw new IllegalStateException("it is not allowed to invoke setPortletMode after sendRedirect has been called");        }        Set allowedModes = (Set) req.getAttribute(SportletProperties.ALLOWED_MODES);        if (allowedModes != null) {            if (!allowedModes.contains(portletMode.toString())) throw new PortletModeException("Unsupported portlet mode!", portletMode);            req.setAttribute(SportletProperties.PORTLET_MODE, portletMode);        } else {            throw new IllegalStateException("No list of supported modes has been provided!");        }        isRedirectAllowed = false;    }    /**     * Instructs the portlet container to send a redirect response     * to the client using the specified redirect location URL.     * <p/>     * This method only accepts an absolute URL (e.g.     * <code>http://my.co/myportal/mywebap/myfolder/myresource.gif</code>)     * or a full path URI (e.g. <code>/myportal/mywebap/myfolder/myresource.gif</code>).     * If required,     * the portlet container may encode the given URL before the     * redirection is issued to the client.     * <p/>     * The sendRedirect method can not be invoked after any of the     * following methods of the ActionResponse interface has been called:     * <ul>     * <li>setPortletMode     * <li>setWindowState     * <li>setRenderParameter     * <li>setRenderParameters     * </ul>     *     * @throws IllegalStateException if the method is invoked after any of above mentioned methods of     *                               the ActionResponse interface has been called.     * @param		location	the redirect location URL     * @exception	java.io.IOException if an input or output exception occurs.     * @exception	IllegalArgumentException if a relative path URL is given     */    public void sendRedirect(String location)            throws java.io.IOException {        // TODO needs work        if (isRedirectAllowed) {            if (location != null) {                HttpServletResponse res = (HttpServletResponse) super.getResponse();                if (location.indexOf("/") == -1) throw new IllegalArgumentException("Must be an absolute URL or full path URI");                if (location.indexOf("://") != -1) {                    //   provider.setAbsoluteURL(location);                } else {                    //   provider.setFullPath(location);                }                location = res.encodeRedirectURL(location.toString());                redirectLocation = location;                redirected = true;                req.setAttribute(SportletProperties.RESPONSE_COMMITTED, "true");                // Don't do actual redirect this will be done by PortletServlet                // res.sendRedirect(location);            }        } else {            throw new IllegalStateException("Can't invoke sendRedirect() after certain methods have been called");        }    }    /**     * Sets a parameter map for the render request.     * <p/>     * All previously set render parameters are cleared.     * <p/>     * These parameters will be accessible in all     * sub-sequent render calls via the     * <code>PortletRequest.getParameter</code> call until     * a new request is targeted to the portlet.     * <p/>     * The given parameters do not need to be encoded     * prior to calling this method.     *     * @param parameters Map containing parameter names for     *                   the render phase as     *                   keys and parameter values as map     *                   values. The keys in the parameter     *                   map must be of type String. The values     *                   in the parameter map must be of type     *                   String array (<code>String[]</code>).     * @throws IllegalStateException if the method is invoked after <code>sendRedirect</code> has been called.     * @exception	IllegalArgumentException if parameters is <code>null</code>, if     * any of the key/values in the Map are <code>null</code>,     * if any of the keys is not a String, or if any of     * the values is not a String array.     */    public void setRenderParameters(java.util.Map parameters) {        if (redirected) {            throw new IllegalStateException("Can't invoke setRenderParameters() after sendRedirect() has been called");        }        if (parameters == null) {            throw new IllegalArgumentException("Render parameters must not be null.");        }        Map<String, String[]> params = new HashMap<String, String[]>();        for (Object obj : parameters.keySet()) {            if (!(obj instanceof String))                throw new IllegalArgumentException("Key must not be null and of type java.lang.String.");            String key = (String) obj;            Object vals = parameters.get(key);            if (!(vals instanceof String[]))                throw new IllegalArgumentException("Value must not be null and of type java.lang.String[].");            String newkey = SportletProperties.RENDER_PARAM_PREFIX + key;            params.put(newkey, (String[])vals);        }        renderParams.clear();        renderParams.putAll(params);        isRedirectAllowed = false;    }    /**     * Sets a String parameter for the render request.     * <p/>     * These parameters will be accessible in all     * sub-sequent render calls via the     * <code>PortletRequest.getParameter</code> call until     * a request is targeted to the portlet.     * <p/>     * This method replaces all parameters with the given key.     * <p/>     * The given parameter do not need to be encoded     * prior to calling this method.     *     * @param key   key of the render parameter     * @param value value of the render parameter     * @throws IllegalStateException if the method is invoked after <code>sendRedirect</code> has been called.     * @exception IllegalArgumentException if key or value are <code>null</code>.     */    public void setRenderParameter(String key, String value) {        if (redirected) {            throw new IllegalStateException("Can't invoke setRenderParameter() after sendRedirect() has been called");        }        if ((key == null) || (value == null)) {            throw new IllegalArgumentException("Render parameter key or value must not be null.");        }        renderParams.put(SportletProperties.RENDER_PARAM_PREFIX + key, new String[]{value});        isRedirectAllowed = false;    }    /**     * Sets a String array parameter for the render request.     * <p/>     * These parameters will be accessible in all     * sub-sequent render calls via the     * <code>PortletRequest.getParameter</code> call until     * a request is targeted to the portlet.     * <p/>     * This method replaces all parameters with the given key.     * <p/>     * The given parameter do not need to be encoded     * prior to calling this method.     *     * @param key    key of the render parameter     * @param values values of the render parameter     * @throws IllegalStateException if the method is invoked after <code>sendRedirect</code> has been called.     * @exception	IllegalArgumentException if key or value are <code>null</code>.     */    public void setRenderParameter(String key, String[] values) {        if (redirected) {            throw new IllegalStateException("Can't invoke setRenderParameter() after sendRedirect() has been called");        }        if (key == null || values == null || values.length == 0) {            throw new IllegalArgumentException("Render parameter key or value  must not be null or values be an empty array.");        }        renderParams.put(SportletProperties.RENDER_PARAM_PREFIX + key, values);        isRedirectAllowed = false;    }    public Map getRenderParameters() {        return renderParams;    }    public String getRedirectLocation() {        return redirectLocation;    }}

⌨️ 快捷键说明

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