【问题标题】:Cannot access implict object from within method in custom JSP tag file无法从自定义 JSP 标记文件中的方法内访问隐含对象
【发布时间】:2011-02-26 21:06:15
【问题描述】:

我正在尝试创建自定义 jsp 标记。一切正常,除了我的请求似乎超出了我的自定义函数的范围。

这是 .tag 文件中的相关位:

<%!
private  String process(String age, BigDecimal amount)
        {
//Attempting to access request here results in an compile time error trying to:
String url=request.getURL;
        }
%>

我对 JSP 很陌生,所以我确定我遗漏了一些明显的东西..但我似乎无法弄清楚是什么。任何帮助表示赞赏。

【问题讨论】:

    标签: java jsp custom-tags


    【解决方案1】:

    我怀疑这是因为自定义函数本身没有在 JSP 服务调用的主执行中定义,而是在生成的 JSP 类中定义为单独的方法。因此,request 变量隐含地不可见。

    澄清一下,如果您查看 JSP 编译器生成的 java 源代码(特定于 appserver),您会看到它是如何连接在一起的。

    我认为您必须将请求对象声明为函数的参数,并在调用时将其传递。

    <%!
    private String process(String age, BigDecimal amount, ServletRequest request) {
       String url=request.getURL;
       ....
    }
    %>
    

    【讨论】:

    • 这可能是我需要做的。我的假设基于这篇文章:today.java.net/article/2003/11/13/… 我想可能是我不理解: (有效)和 哪个没有(差异是打开标签
    • @David: &lt;%! 在生成的 JSP 类中声明了一个新函数,而 &lt;% 只是将一些任意 java 片段内联到 JSP 类的主要 service() 方法中。当您考虑 JSP 编译器实际上在做什么时,它确实是有道理的,即使它表面上看起来是任意的。
    • +1,但修复getURL - 没有这样的“方法”;)也许HttpServletRequest
    猜你喜欢
    • 2011-02-26
    • 1970-01-01
    • 2015-09-01
    • 2014-12-15
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    相关资源
    最近更新 更多