我想在 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/