我想在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;没有用。
答案 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和其他许多文件,这些文件对你有长远的帮助。