Package org.zkoss.web.servlet.xel

## Class RequestContexts

- java.lang.Object
- - org.zkoss.web.servlet.xel.RequestContexts

-     public class RequestContexts
      extends java.lang.Object

  RequestContexts maintains a stack of `RequestContext` to simplify the signatures of the XEL function.

  It is designed to make the signature of XEL functions (see `ServletFns`) simpler. For example, `ServletFns.getCurrentContext()` requires no argument, since it assumes the current context can be retrieved from `getCurrent()`.

  Spec Issue:
  It is controversial whether the introduction of `RequestContext` and `RequestContexts` is worth. However, we have to maintain the backward compatibility of the XEL/EL function signatures.

  Since:
    3.0.0
  Author:
    tomyeh

- - ### Constructor Summary

    Constructors
    Modifier | Constructor | Description
    --- | --- | ---
    `protected` | `RequestContexts()` |

  - ### Method Summary

    All Methods Static Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `static RequestContext` | `getCurrent()` | Returns the current page context if this thread is evaluating a page, or null if not.
    `static void` | `pop()` | Pops the context out and use the previous one as the current context.
    `static void` | `push​(RequestContext jc)` | Pushes the context as the current context, such that it will be returned by `getCurrent()`.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### RequestContexts

          protected RequestContexts()

  - ### Method Detail

    - #### getCurrent

          public static final RequestContext getCurrent()

      Returns the current page context if this thread is evaluating a page, or null if not.

    - #### push

          public static final void push​(RequestContext jc)

      Pushes the context as the current context, such that it will be returned by `getCurrent()`. The reason this method exists is many functions (`ServletFns`) counts on it.

      However, you don't need to invoke this method if you are using DSP.

      1. If go thru DSP, it is done automatically (by `Interpreter`

      Note: you must use try/finally as follows:

          RequestContexts.push(jc);
          try {
            ...
          } finally {
            RequestContexts.pop();
          }

    - #### pop

          public static final void pop()

      Pops the context out and use the previous one as the current context.

      However, you don't need to invoke this method if you are using DSP.

      See Also:
        `push(org.zkoss.web.servlet.xel.RequestContext)`