java - 如何在 JSP 声明中使用 JSTL

标签 java jsp jstl jsp-tags scriptlet

我想在 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 不起作用。

最佳答案

这是因为为 scriptlet <% %> 生成的代码位于服务方法中,该方法就像使用多个请求线程在同一对象上再次调用

而 <%! 则进入全局类空间,或者只是声明 JSP 页面的全局方法和变量。

因此,在您的 scriptlet 中,您可以调用 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 等,从长远来看,这些会对您有所帮助。

关于java - 如何在 JSP 声明中使用 JSTL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30023532/

相关文章:

java - printStackTrace() 和 toString() 之间的区别

java - UseAdaptiveSizePolicy 和其他 jvm 选项

java - jsp safari浏览器windows文件下载内容配置文件名变成-

java - 为什么我不能使用 <jsp :getProperty> without <jsp:useBean>?

java - 在 JSTL 中使用 'fn' 打印数组长度

java - 如何让 JSTL 在引用未定义的属性时给出错误

java - System.in 上的 readLine,无需挂起 Swing GUI 线程

javascript - Javascript 中值列表的动态验证

java - JSTL 标签看不到 java 变量

java - Java中HashMap的内部实现