📄 freemarkerpagecontext.java
字号:
}
if (m instanceof TemplateBooleanModel) {
return ((TemplateBooleanModel) m).getAsBoolean() ? Boolean.TRUE : Boolean.FALSE;
}
return m;
}
catch (TemplateModelException e) {
throw new UndeclaredThrowableException(e);
}
}
case REQUEST_SCOPE: {
return getRequest().getAttribute(name);
}
case SESSION_SCOPE: {
HttpSession session = getSession(false);
if(session == null) {
return null;
}
return session.getAttribute(name);
}
case APPLICATION_SCOPE: {
return getServletContext().getAttribute(name);
}
default: {
throw new IllegalArgumentException("Invalid scope " + scope);
}
}
}
public Object findAttribute(String name)
{
Object retval = getAttribute(name, PAGE_SCOPE);
if(retval != null) return retval;
retval = getAttribute(name, REQUEST_SCOPE);
if(retval != null) return retval;
retval = getAttribute(name, SESSION_SCOPE);
if(retval != null) return retval;
return getAttribute(name, APPLICATION_SCOPE);
}
public void removeAttribute(String name) {
removeAttribute(name, PAGE_SCOPE);
removeAttribute(name, REQUEST_SCOPE);
removeAttribute(name, SESSION_SCOPE);
removeAttribute(name, APPLICATION_SCOPE);
}
public void removeAttribute(String name, int scope) {
switch(scope) {
case PAGE_SCOPE: {
environment.getGlobalNamespace().remove(name);
break;
}
case REQUEST_SCOPE: {
getRequest().removeAttribute(name);
break;
}
case SESSION_SCOPE: {
HttpSession session = getSession(false);
if(session != null) {
session.removeAttribute(name);
}
break;
}
case APPLICATION_SCOPE: {
getServletContext().removeAttribute(name);
break;
}
default: {
throw new IllegalArgumentException("Invalid scope: " + scope);
}
}
}
public int getAttributesScope(String name) {
if(getAttribute(name, PAGE_SCOPE) != null) return PAGE_SCOPE;
if(getAttribute(name, REQUEST_SCOPE) != null) return REQUEST_SCOPE;
if(getAttribute(name, SESSION_SCOPE) != null) return SESSION_SCOPE;
if(getAttribute(name, APPLICATION_SCOPE) != null) return APPLICATION_SCOPE;
return 0;
}
public Enumeration getAttributeNamesInScope(int scope) {
switch(scope) {
case PAGE_SCOPE: {
try {
return
new TemplateHashModelExEnumeration(environment.getGlobalNamespace());
}
catch(TemplateModelException e) {
throw new UndeclaredThrowableException(e);
}
}
case REQUEST_SCOPE: {
return getRequest().getAttributeNames();
}
case SESSION_SCOPE: {
HttpSession session = getSession(false);
if(session != null) {
return session.getAttributeNames();
}
return Collections.enumeration(Collections.EMPTY_SET);
}
case APPLICATION_SCOPE: {
return getServletContext().getAttributeNames();
}
default: {
throw new IllegalArgumentException("Invalid scope " + scope);
}
}
}
public JspWriter getOut() {
return jspOut;
}
private HttpSession getSession(boolean create) {
if(session == null) {
session = request.getSession(create);
if(session != null) {
setAttribute(SESSION, session);
}
}
return session;
}
public HttpSession getSession() {
return getSession(false);
}
public Object getPage() {
return servlet;
}
public ServletRequest getRequest() {
return request;
}
public ServletResponse getResponse() {
return response;
}
public Exception getException() {
throw new UnsupportedOperationException();
}
public ServletConfig getServletConfig() {
return servlet.getServletConfig();
}
public ServletContext getServletContext() {
return servlet.getServletContext();
}
public void forward(String url) throws ServletException, IOException {
//TODO: make sure this is 100% correct by looking at Jasper output
request.getRequestDispatcher(url).forward(request, response);
}
public void include(String url) throws ServletException, IOException {
//TODO: make sure this is 100% correct by looking at Jasper output
request.getRequestDispatcher(url).include(request, response);
}
public void handlePageException(Exception e) {
throw new UnsupportedOperationException();
}
public void handlePageException(Throwable e) {
throw new UnsupportedOperationException();
}
public BodyContent pushBody() {
BodyContent bc = new TagTransformModel.BodyContentImpl(getOut(), true);
pushWriter(bc);
return bc;
}
public JspWriter popBody() {
popWriter();
return (JspWriter) getAttribute(OUT);
}
Tag peekTopTag() {
return tags.isEmpty() ? null : (Tag) tags.get(tags.size() - 1);
}
void popTopTag() {
tags.remove(tags.size() - 1);
}
void popWriter() {
jspOut = (JspWriter)outs.remove(outs.size() - 1);
setAttribute(OUT, jspOut);
}
void pushTopTag(Tag tag) {
tags.add(tag);
}
void pushWriter(JspWriter out) {
outs.add(jspOut);
jspOut = out;
setAttribute(OUT, jspOut);
}
private static class TemplateHashModelExEnumeration implements Enumeration {
private final TemplateModelIterator it;
private TemplateHashModelExEnumeration(TemplateHashModelEx hashEx) throws TemplateModelException {
it = hashEx.keys().iterator();
}
public boolean hasMoreElements() {
try {
return it.hasNext();
} catch (TemplateModelException tme) {
throw new UndeclaredThrowableException(tme);
}
}
public Object nextElement() {
try {
return ((TemplateScalarModel) it.next()).getAsString();
} catch (TemplateModelException tme) {
throw new UndeclaredThrowableException(tme);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -