我想在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中找到完整的文件。
发布于 2015-05-10 23:26:37
这是因为在服务方法中为scriptlet <% %>goes生成的代码类似于使用多个请求线程反复调用同一个对象
而<%!则进入全局类空间,或者只是声明JSP页面的全局方法和变量。
因此,在脚本中,您可以调用方法,比如fetchData(),或者其他类似于服务()方法的方法,比如在普通的java类中。
您甚至可以如下所示地声明一个字段并引用它,如下面的示例所示:
<%!
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标记和库,比如核心标记库和许多其他库,从长远来看,这些都会对您有所帮助。
https://stackoverflow.com/questions/30023532
复制相似问题