如何获取对象并在JSP中的jstl EL中调用方法

时间:2010-10-05 03:51:58

标签: jsp el

我正在尝试将以下scriptlet代码转换为EL。我尝试了以下(下面),但无法使其正常工作。 getValue()是ConfigFactory的一个方法,它返回一个字符串:

在监听器中,我将configFactory设置为event.getServletContext().setAttribute("ConfigFactory", new ConfigFactory());

在我的scriptlet代码中有:(并且工作正常)

<% 
  ConfigFactory cf = (ConfigFactory) application.getAttribute("ConfigFactory");
%>
Value from scriptlet= <%=cf.getValue()%> <br/>
EL给了我麻烦:

<c:set var="cf" value="${initParam['ConfigFactory']}"/>
<c:out value="${cf.getValue}"/>  <!-- try # 1 -->
<c:out value="${cf.value}"/>     <!-- try # 2 -->

2 个答案:

答案 0 :(得分:1)

这一行

<c:set var="cf" value="${initParam['ConfigFactory']}"/>

基本相同
pageContext.setAttribute("cf", application.getInitParameter("ConfigFactory"));

你不想要这个。摆脱那条线。在EL中,您可以通过其名称隐式直接访问所有请求,会话和应用程序属性。以下

${ConfigFactory}

基本相同
out.print(pageContext.findAttribute("ConfigFactory"));

PageContext#getAttribute()分别测试HttpServletRequest#getAttribute()HttpSession#getAttribute()ServletContext#getAttribute()和最后getValue(),直到找到第一个非空值。这更像你想要的。

您最终可以通过EL方式访问${ConfigFactory.value} 方法:

ConfigFactory ConfigFactory = new ConfigFactory();

与问题无关,但您通常会为实例标识符指定一个以小写字母开头的名称。你也没有做{{1}},对吧? :)

答案 1 :(得分:0)

未经测试:

${applicationScope.ConfigFactory.value}