【问题标题】:Alternative of jsp expressions in jstljstl中jsp表达式的替代
【发布时间】:2013-11-27 11:39:23
【问题描述】:

我在我们所有的 jsp 页面中大量使用 jstl 而不是 jsp scriptlet,但我无法找到 jstl 中 jsp 表达式的替代方案。

我有我的代码 sn-p

mycode.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 

<c:set  var="appId" value="${requestScope.appId}"/>
<h1>${appId}</h1>
<BR/>
<a href="/admin/loadData">Load Data</a>
||&nbsp;&nbsp <a href="<%= UrlConstants.ADJUSTMENT_NOTE_LEDGER_SUGGEST_BOX%>">Load Demo</a>

我可以知道 jstl 中 行的替代方案是什么。这里 UrlConstants 是我的接口,用于声明一些 url 常量

【问题讨论】:

  • 想到了将 UrlConstants 转换为带有 getter 的适当 POJO 类。
  • 其实我不想把那个界面当作pojo。

标签: java jsp jstl


【解决方案1】:

已编辑

JSTL 标准无法做到这一点。

使用scriptlet,无论是一行&lt;% =%&gt;还是更多&lt;% %&gt;,JSP都会经过JSP页面的翻译阶段,然后编译成一个servlet。 在翻译过程中指令插入到 Scriptlet _jspService() 方法中的方式与网页上的相同。 _jspService()方法对应JSP页面的body。

在您的情况下,就像生成这样的一行:

out.write("<a href=\" +  UrlConstants.ADJUSTMENT_NOTE_LEDGER_SUGGEST_BOX + "\" >Load Demo</a>" );

所以这适用于 scriptlet。与 JSTL 有点不同。

EL 允许页面作者使用表达式来动态读取存储在 JavaBeans 组件、各种数据结构和隐式对象中的应用程序数据。 这些表达式在适当的时间进行评估,并支持立即和延迟评估。 立即评估意味着在第一次呈现页面后立即评估表达式并返回结果。

延迟评估意味着使用表达式语言的技术可以在页面生命周期后期的某个时间使用自己的机制来评估表达式,只要合适的话。以 JavaServer Faces 技术为例。

所有使用${} 语法的表达式都会被立即计算,这是由ELResolverELContext 和其他对象生成的。 EL 机制的核心是可扩展的 ELResolver 类。

实现 ELResolver 的类定义了如何解析引用特定类型的对象或属性的表达式。在下面的表达式中,第一次调用BeanELResolver 实例来查找基础对象employee,它是一个JavaBeans 组件。解析器找到对象后,会再次调用它来解析雇员对象的属性 lName。

${employee.lName}

统一的 EL 包括一组标准解析器实现:ArrayELResolverBeanELResolverListELResolverMapELResolverResourceBundleELResolver。 JSP 2.1 提供了两个 EL 解析器来处理引用这些对象的表达式:ImplicitObjectELResolverScopedAttributeELResolver

根据使用统一 EL 的技术,其他解析器可能可用。此外,应用程序开发人员可以添加他们自己的ELResolver 实现,通过向应用程序注册它们来支持统一 EL 尚不支持的表达式解析。

因此,默认情况下,EL 不会评估您想要的模式的常量值。

查看此链接了解更多详情:http://docs.oracle.com/javaee/5/tutorial/doc/bnahq.html 看到这个链接How to reference constants in EL?有几个选项可以解决你的问题

【讨论】:

  • 感谢您的回复,但这不是我对这个问题的预期答案,上面的jsp表达式是否有任何替代方法(请重新阅读我的查询)
  • @majji:使用 JSP EL 访问类的静态字段是不可能的,直到规范的版本 3。如果您使用的是 Tomcat 8 等 Java EE 7 容器,则可以,但以前不行。见stackoverflow.com/questions/20234337/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
  • 2018-12-19
  • 1970-01-01
相关资源
最近更新 更多