link.java

来自「this is for appfuse1.8 source using stru」· Java 代码 · 共 176 行

JAVA
176
字号
package org.appfuse.webapp.tapestry;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.net.URLEncoder;import java.util.ArrayList;import java.util.List;import org.apache.tapestry.ApplicationRuntimeException;import org.apache.tapestry.IRequestCycle;import org.apache.tapestry.Tapestry;import org.apache.tapestry.engine.ILink;import org.apache.tapestry.request.RequestContext;import org.apache.tapestry.util.io.DataSqueezer;public class Link implements ILink{    protected IRequestCycle requestCycle;    private String servletPath;    private String[] serviceContext;    private String[] parameters;    public Link(IRequestCycle requestCycle, String servletPath, String[] serviceContext, Object[] parameters)    {        this.requestCycle = requestCycle;        this.servletPath = servletPath;        this.serviceContext = serviceContext;        if (parameters != null)        {            DataSqueezer squeezer = requestCycle.getEngine().getDataSqueezer();            try            {                this.parameters = squeezer.squeeze(parameters);            }            catch (IOException e)            {                throw new ApplicationRuntimeException(e);            }        }    }        /**     * @see org.apache.tapestry.engine.ILink#getURL()     */    public String getURL()    {        return getURL(null, true);    }    /**     * @see org.apache.tapestry.engine.ILink#getURL(java.lang.String, boolean)     */    public String getURL(String anchor, boolean includeParameters)    {        return constructURL(new StringBuffer(), anchor, includeParameters);    }    /**     * @see org.apache.tapestry.engine.ILink#getAbsoluteURL()     */    public String getAbsoluteURL()    {        return getAbsoluteURL(null, null, 0, null, true);    }    /**     * @see org.apache.tapestry.engine.ILink#getAbsoluteURL(java.lang.String, java.lang.String, int, java.lang.String, boolean)     */    public String getAbsoluteURL(String scheme, String server, int port, String anchor, boolean includeParameters)    {        RequestContext context = this.requestCycle.getRequestContext();        StringBuffer buffer = new StringBuffer();                buffer.append((scheme != null) ? scheme : context.getScheme());        buffer.append("://");        buffer.append((server != null) ? server : context.getServerName());        buffer.append(':');        buffer.append((port != 0) ? port : context.getServerPort());                return constructURL(buffer, anchor, includeParameters);    }        private String constructURL(StringBuffer buffer, String anchor, boolean includeParameters)    {        RequestContext context = this.requestCycle.getRequestContext();                buffer.append(context.getRequest().getContextPath()).append('/').append(this.servletPath);                if (includeParameters)        {            String encoding = this.requestCycle.getEngine().getOutputEncoding();            buffer.append('?');                        try            {                if (this.serviceContext != null)                {                    for (int i = 0; i < this.serviceContext.length; i++)                    {                        buffer.append(Tapestry.SERVICE_QUERY_PARAMETER_NAME);                        buffer.append('=');                        buffer.append(URLEncoder.encode(this.serviceContext[i], encoding));                        buffer.append('&');                    }                }                                if (this.parameters != null)                {                    for (int i = 0; i < this.parameters.length; i++)                    {                        buffer.append(Tapestry.PARAMETERS_QUERY_PARAMETER_NAME);                        buffer.append('=');                        buffer.append(URLEncoder.encode(this.parameters[i], encoding));                        buffer.append('&');                    }                }                                // Delete trailing & or ?                buffer.deleteCharAt(buffer.length() - 1);            }            catch (UnsupportedEncodingException e)            {                throw new ApplicationRuntimeException(e);            }        }                if (anchor != null)        {            buffer.append('#').append(anchor);        }                return this.requestCycle.encodeURL(buffer.toString());    }    /**     * @see org.apache.tapestry.engine.ILink#getParameterNames()     */    public String[] getParameterNames()    {        List parameterList = new ArrayList(2);        if ((this.serviceContext != null) && (this.serviceContext.length > 0))        {            parameterList.add(Tapestry.SERVICE_QUERY_PARAMETER_NAME);        }        if ((this.parameters != null) && (this.parameters.length > 0))        {            parameterList.add(Tapestry.PARAMETERS_QUERY_PARAMETER_NAME);        }                return (String[]) parameterList.toArray(new String[parameterList.size()]);    }    /**     * @see org.apache.tapestry.engine.ILink#getParameterValues(java.lang.String)     */    public String[] getParameterValues(String name)    {        if (name.equals(Tapestry.PARAMETERS_QUERY_PARAMETER_NAME))        {            return this.parameters;        }                if (name.equals(Tapestry.SERVICE_QUERY_PARAMETER_NAME))        {            return this.serviceContext;        }                throw new IllegalArgumentException(Tapestry.format("EngineServiceLink.unknown-parameter-name", name));    }}

⌨️ 快捷键说明

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