001: /* ActionContext.java
002:
003: {{IS_NOTE
004: Purpose:
005:
006: Description:
007:
008: History:
009: Tue Sep 6 09:30:59 2005, Created by tomyeh
010: }}IS_NOTE
011:
012: Copyright (C) 2005 Potix Corporation. All Rights Reserved.
013:
014: {{IS_RIGHT
015: This program is distributed under GPL Version 2.0 in the hope that
016: it will be useful, but WITHOUT ANY WARRANTY.
017: }}IS_RIGHT
018: */
019: package org.zkoss.web.servlet.dsp.action;
020:
021: import java.io.Writer;
022: import java.io.IOException;
023: import java.util.Map;
024:
025: import javax.servlet.ServletException;
026:
027: /**
028: * Encapsulates a portion of DSP page in an object that can be invoked
029: * as many times as needed.
030: *
031: * @author tomyeh
032: */
033: public interface ActionContext {
034: /** The page scope. */
035: public static final int PAGE_SCOPE = 0;
036: /** The request scope. */
037: public static final int REQUEST_SCOPE = 1;
038: /** The session scope. */
039: public static final int SESSION_SCOPE = 2;
040: /** The application scope. */
041: public static final int APPLICATION_SCOPE = 3;
042:
043: /** Returns the attribute of the specified scope.
044: * @param scope one of {@link #PAGE_SCOPE}, {@link #REQUEST_SCOPE},
045: * {@link #SESSION_SCOPE} and {@link #APPLICATION_SCOPE}.
046: */
047: public Object getAttribute(String name, int scope);
048:
049: /** Sets the attribute of the specified scope.
050: * @param scope one of {@link #PAGE_SCOPE}, {@link #REQUEST_SCOPE},
051: * {@link #SESSION_SCOPE} and {@link #APPLICATION_SCOPE}.
052: */
053: public void setAttribute(String name, Object value, int scope);
054:
055: /** Removes the attribute of the specified scope.
056: * @param scope one of {@link #PAGE_SCOPE}, {@link #REQUEST_SCOPE},
057: * {@link #SESSION_SCOPE} and {@link #APPLICATION_SCOPE}.
058: */
059: public void removeAttribute(String name, int scope);
060:
061: /** Finds the attribute from page, request, session to application scope
062: */
063: public Object findAttribute(String name);
064:
065: /** Sets the content type.
066: */
067: public void setContentType(String ctype);
068:
069: /** Returns the current output.
070: */
071: public Writer getOut() throws IOException;
072:
073: /** Returns the parent action, or null if no parent at all.
074: */
075: public Action getParent();
076:
077: /** Renders the nested fragment.
078: *
079: * @param out the output. If null, {@link #getOut} is assumed.
080: */
081: public void renderFragment(Writer out) throws ServletException,
082: IOException;
083:
084: /** Includes the specified URI and render the result to the specified
085: * output.
086: *
087: * @param uri the URI to include. It is OK to relevant (without leading
088: * '/'). If starts with "/", the context path of request is assumed.
089: * To reference to foreign context, use "~ctx/" where ctx is the
090: * context path of the foreign context (without leading '/').
091: * @param params a map of parameters, or null to ignore.
092: * The map is passed thru the request attribute called arg.
093: */
094: public void include(String uri, Map params)
095: throws ServletException, IOException;
096:
097: /** Encodes the specified URI.
098: * <p>In additions, if uri starts with "/", the context path, e.g., /we2,
099: * is prefixed.
100: * In other words, "/ab/cd" means it is relevant to the servlet
101: * context path (say, "/we2").
102: *
103: * <p>If uri starts with "~abc/", it means it is relevant to a foreign
104: * context called /abc. And, it will be converted to "/abc/" first
105: * (without prefix request.getContextPath()).
106: *
107: * <p>Finally, the uri is encoded by HttpServletResponse.encodeURL.
108: */
109: public String encodeURL(String uri) throws ServletException;
110:
111: /** Returns the line number of this action.
112: * It is used for throwing exception and debug purpose.
113: */
114: public int getLineNumber();
115: }
|