我正在尝试将以下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 -->
答案 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}