如何在自定义EL函数中访问JSP上下文。
答案 0 :(得分:7)
您必须明确地将其作为实现EL函数的方法的参数。
实现EL功能的Java方法:
public static Object findAttribute(String name, PageContext context) {
return context.findAttribute(name);
}
EL功能的TLD条目:
<function>
<name>findAttribute</name>
<function-class>kschneid.Functions</function-class>
<function-signature>java.lang.Object findAttribute(java.lang.String, javax.servlet.jsp.PageContext)</function-signature>
</function>
JSP中的用法:
<%@ taglib prefix="kfn" uri="http://kschneid.com/jsp/functions" %>
...
<c:if test="${empty kfn:findAttribute('userId', pageContext)}">...</c:if>
答案 1 :(得分:-1)
或者你可以使用复杂的技巧。如果你对ServletContext
而不是PageContext
没问题,那将会更容易
ThreadLocal<PageContext>
变量代码示例:
public class MyFunctions {
private static final ThreadLocal<ServletContext> servletContext = new ThreadLocal<>();
public static void setServletContext(ServletContext servletContext) {
MyFunctions.servletContext.set(servletContext);
}
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException{
...
MyFunctions.setServletContext(servletRequest.getServletContext());
filterChain.doFilter(servletRequest, servletResponse);
}
如果真的需要PageContext
更好地在JSP scritplet中执行setPageContext
,可能在包含文件中。这有一个缺点,即每个JSP文件都必须执行该包含