如何在JSP声明中使用JSTL

时间:2015-05-04 06:04:45

标签: 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 声明中的JSTL&#34; fetchCatalogEntries&#34;没有用。

1 个答案:

答案 0 :(得分:0)

这是因为scriptlet&lt; %%&gt;的生成代码位于service方法中,就像使用多个请求线程再次调用同一个对象一样

而&lt;%!,进入全局类空间或简单地为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和其他许多文件,这些文件对你有长远的帮助。