OS(OpenSymphony)的SiteMesh是一个用来在JSP中实现页面布局和装饰(layout and decoration)的框架组件

源代码在线查看: abstractpage.java

软件大小: 7272 K
上传用户: xingxian
关键词: OpenSymphony decoration SiteMesh layout
下载地址: 免注册下载 普通下载 VIP

相关代码

				/*				 * Title:        AbstractPage				 * Description:				 *				 * This software is published under the terms of the OpenSymphony Software				 * License version 1.1, of which a copy has been included with this				 * distribution in the LICENSE.txt file.				 */								package com.opensymphony.module.sitemesh.parser;								import com.opensymphony.module.sitemesh.Page;								import javax.servlet.http.HttpServletRequest;				import javax.servlet.http.HttpServletRequestWrapper;				import java.io.*;				import java.util.HashMap;				import java.util.Map;				import java.util.Set;								/**				 * Abstract implementation of {@link com.opensymphony.module.sitemesh.Page} .				 *				 * Contains base methods for storing and accessing page properties.				 * Also stores {@link #pageData} as byte[] and implements write???()				 * methods.				 *				 * Concrete implementations need only set the {@link #pageData} and				 * call {@link #addProperty(java.lang.String,java.lang.String)} to				 * add all the required information.				 *				 * @author Joe Walnes				 * @version $Revision: 1.6 $				 *				 * @see com.opensymphony.module.sitemesh.Page				 */				public abstract class AbstractPage implements Page {				    /**				     * Map of all properties.				     * Key is String. Value is java.util.List of multiple String values.				     */				    private final Map properties = new HashMap();								    /** Date of page contents. */				    protected char[] pageData = new char[0];								    /** RequestURI of original Page. */				    private HttpServletRequest request;								    public void writePage(Writer out) throws IOException {				        out.write(pageData);				    }								    public String getPage() {				        try {				            StringWriter writer = new StringWriter();				            writePage(writer);				            return writer.toString();				        } catch (IOException e) {				            throw new IllegalStateException("Could not get page " + e.getMessage());				        }				    }								    /**				     * Write data of html <body> tag.				     *				     * Must be implemented. Data written should not actually contain the				     * body tags, but all the data in between.				     */				    public abstract void writeBody(Writer out) throws IOException;								    public String getBody() {				        try {				            StringWriter writer = new StringWriter();				            writeBody(writer);				            return writer.toString();				        } catch (IOException e) {				            throw new IllegalStateException("Could not get body " + e.getMessage());				        }				    }								    /** Return title of from "title" property. Never returns null. */				    public String getTitle() {				        return noNull(getProperty("title"));				    }								    public int getContentLength() {				        try				        {				            //todo - this needs to be fixed properly (SIM-196)				            return new String(pageData).getBytes("UTF-8").length; // we cannot just measure pageData.length, due to i18n issues (SIM-157)				        }				        catch (UnsupportedEncodingException e)				        {				            return new String(pageData).getBytes().length;				        }				    }								    public String getProperty(String name) {				        if (!isPropertySet(name)) return null;				        return (String)properties.get(name);				    }								    public int getIntProperty(String name) {				        try {				            return Integer.parseInt(noNull(getProperty(name)));				        }				        catch (NumberFormatException e) {				            return 0;				        }				    }								    public long getLongProperty(String name) {				        try {				            return Long.parseLong(noNull(getProperty(name)));				        }				        catch (NumberFormatException e) {				            return 0;				        }				    }								    public boolean getBooleanProperty(String name) {				        String property = getProperty(name);				        if (property == null || property.trim().length() == 0) return false;				        switch (property.charAt(0)) {				            case '1':				            case 't':				            case 'T':				            case 'y':				            case 'Y':				                return true;				            default:				                return false;				        }				    }								    public boolean isPropertySet(String name) {				        return properties.containsKey(name);				    }								    public String[] getPropertyKeys() {				        synchronized(properties) {				            Set keys = properties.keySet();				            return (String[])keys.toArray(new String[keys.size()]);				        }				    }								    public Map getProperties() {				        return properties;				    }								    /** @see com.opensymphony.module.sitemesh.Page#getRequest() */				    public HttpServletRequest getRequest() {				        return request;				    }								    /**				     * Create snapshot of Request.				     *				     * @see com.opensymphony.module.sitemesh.Page#getRequest()				     */				    public void setRequest(HttpServletRequest request) {				        this.request = new PageRequest(request);				    }								    /**				     * Add a property to the properties list.				     *				     * @param name Name of property				     * @param value Value of property				     */				    public void addProperty(String name, String value) {				        properties.put(name, value);				    }								    /** Return String as is, or "" if null. (Prevents NullPointerExceptions) */				    protected static String noNull(String in) {				        return in == null ? "" : in;				    }				}								class PageRequest extends HttpServletRequestWrapper {								    private String requestURI, method, pathInfo, pathTranslated, queryString, servletPath;								    public PageRequest(HttpServletRequest request) {				        super(request);				        requestURI = request.getRequestURI();				        method = request.getMethod();				        pathInfo = request.getPathInfo();				        pathTranslated = request.getPathTranslated();				        queryString = request.getQueryString();				        servletPath = request.getServletPath();				    }								    public String getRequestURI() {				        return requestURI;				    }								    public String getMethod() {				        return method;				    }								    public String getPathInfo() {				        return pathInfo;				    }								    public String getPathTranslated() {				        return pathTranslated;				    }								    public String getQueryString() {				        return queryString;				    }								    public String getServletPath() {				        return servletPath;				    }				}							

相关资源