2015-05-04 83 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标记和图书馆像核心标签库和其他许多人一样,这些将从长远来看帮助你。