【问题标题】:How to use JSTL within JSP declaration如何在 JSP 声明中使用 JSTL
【发布时间】:2015-05-04 06:04:44
【问题描述】:

我想在 JSP 声明中使用 JSTL。我有这样的代码:

<%! void fetchData(String .., String ..){
    //some code...
    pageContext.setAttribute("test",valueForJSTL); // Wont work until I pass pageContext from calling scriptlet
    //some code...
%><%
    //use pageContext variable set above to user in JSP (c:out, wcf:getData etc)**
%><%
}%>

我想知道为什么不允许在 JSP 声明中使用 scriptlet(第 5-7 行)。或者有没有其他方法可以解决这个问题?

我正在从 scriptlet 调用上述函数,我希望此方法进行一些操作,在 pageContext/request 中添加一个变量并在 JSTL 中获取该变量以从 DB 中获取数据。

您可以在以下位置找到完整的文件: http://wikisend.com/download/738986/MyView.jsp 声明“fetchCatalogEntries”中的 JSTL 不起作用。

【问题讨论】:

  • 不清楚你在问什么。请向我们展示您的实际 JSP,而不是语法片段。
  • 嗨,请在第 46 行找到文件:wikisend.com/download/738986/MyView.jsp 我正在调用声明。在“fetchCatalogEntries”函数中,我想在第 88 行使用 JSTL。但是不允许这样做。我不确定我们是否可以在声明方法中使用 scriptlet 标记。
  • 对不起,你已经做了几乎所有的事情,你不能在 JSP 文件中做,请阅读一些教程,例如tutorialspoint.com/jsp
  • 你不能这样做。请就上下文提出建议。如果您编写了此代码,请参阅上面的评论。如果这是一些旧版应用程序,则需要另一种方法。
  • 嗨 @Alan 我知道 JSP 中有很多逻辑。原因 bean 不支持 OOB 以在 JAVA 中获取这些详细信息。这就是为什么我必须使用 JSP。我想知道的唯一细节是为什么在 JSP 声明中,pageContext 或请求变量不可访问

标签: java jsp jstl jsp-tags scriptlet


【解决方案1】:

这是因为 scriptlet 生成的代码进入服务方法,就像使用多个请求线程在同一个对象上再次调用一样

因此,在您的 scriptlet 中,您可以调用方法 say fetchData() 或任何其他方法,就像在普通 java 类中的 service() 方法中一样。

您甚至可以像下面这样声明一个字段,并在下面的示例中引用它:

<%!
    private final Logger logger = new Logger(this.getClass());
    private UserService userService = null;
    public void jspInit() {
        userService = new UserService();
    }
    private String getUserStatus(String userID) {
        return userServce.getUserStatus(userID);
    }
%>

<%
    String userID = request.getParameter("userid");
    String userStatus = getUserStatus(userID);
%>

最后,我建议您不要使用 scriptlet,而是使用 JSTL 标记和库,例如 core-tag-libs 和许多其他库,从长远来看,这些会对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2011-10-30
    • 2011-06-24
    • 1970-01-01
    相关资源
    最近更新 更多