2015-05-04 46 views
1

我想在JSP聲明中使用JSTL。我有這樣的代碼:如何在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中獲取變量以從數據庫中獲取數據。

您可以在以下位置找到完整文件: http://wikisend.com/download/738986/MyView.jsp 聲明「fetchCatalogEntries」中的JSTL不起作用。

+0

目前還不清楚你在問什麼。請向我們展示您的實際JSP,而不是語法片段。 – skaffman

+0

嗨, 請在下面找到該文件: http://wikisend.com/download/738986/MyView.jsp 在第46行我打電話給宣言。在「fetchCatalogEntries」函數中,我想在第88行使用JSTL。但是它不允許這樣做。我不確定我們是否可以在聲明方法中使用scriptlet標籤。 – Tarun

+1

對不起,你已經完成了幾乎所有的事情,你不能在JSP文件中完成,請仔細閱讀一些教程,例如http://www.tutorialspoint.com/jsp/ – Shota

回答

0

這是因爲對於所述的scriptlet <%%>將所生成的代碼中使用多個請求線程

鑑於<%變爲在作爲像再次調用該服務的方法和在相同的對象!進入全局類空間或簡單地爲JSP頁面聲明全局方法和變量。

因此,在你的scriptlet中,你可以調用say 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標記和圖書館像核心標籤庫和其他許多人一樣,這些將從長遠來看幫助你。