[英]How to use JSTL within JSP declaration
我想在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 <%%>生成的代碼進入了service方法,就像使用多個請求線程再次在同一對象上調用一樣
而<%!,進入全局類空間或只是聲明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和許多其他標簽,這些將長期幫助您。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.