【问题标题】:Evaluating dynamic EL expressions at runtime in JSP page在 JSP 页面中在运行时评估动态 EL 表达式
【发布时间】:2020-04-06 09:19:48
【问题描述】:

我正在整理一个应用程序,并希望在呈现页面时将“自定义”EL 表达式应用于页面上的部分。这将帮助我控制给定页面状态的页面上显示的部分。问题是 EL 表达式没有被评估和仅作为字符串值处理。例如

<c:if test="${form.conditionEL}" >
  <input type="submit" value="Close">
</c:if>

${field.conditionEL} 的值可能评估为“submission.status eq 'COMPLETE'”。

那么,有没有办法让该字符串值在 JSP 页面中被解释?

感谢您为实现这一目标提供的任何帮助。如果我错过了提供任何相关信息来帮助解决问题,请告诉我。

环境:Java 8、Tomcat 9、JSP 3.0、Spring

问候,

迈克

【问题讨论】:

标签: java spring jsp el


【解决方案1】:

我只需将提交状态添加到页面上下文中,您就可以这样做:

<c:if test="${submissionStatus eq 'COMPLETE'}" >
  <input type="submit" value="Close">
</c:if>

【讨论】:

  • 是的。那将是简单的方法,但不是我想要做的动态方式。动态将允许管理员设计表单以不显示基于特定数据点的字段。当我尝试将动态条件评估为 ${form.conditionEL} 对于上述场景时,它显示为“submission.status eq 'COMPLETE'”。当我把那个确切的条件语句放在我的动态语句下面时,它会评估为“真”。所以,很想知道一种方法来确保我写出的字符串可以被评估。
  • 然后在后端创建一个布尔值并将其添加到页面上下文中。
  • 嗯.. 评估后端的条件并存储该结果。这可能会很好地工作。你用过 标签吗?
【解决方案2】:

检查您的页面标记中是否忽略了 EL 表达式。我也遇到了同样的问题,这解决了我的问题。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" isELIgnored="false" %>

【讨论】:

  • 除了动态的之外,它们都在工作。感谢您的建议。
  • 为什么需要这样的功能? EL 和 JSTL 最好用在 MVC 环境中。在 MVC 环境中,所有 HTTP 流问题都在 servlet 中处理,真正的业务功能(模型)在 bean 中处理。只有当所有处理完成后,上下文才会传递给 JSP(视图)进行显示。
  • 它允许管理用户更好地控制何时显示内容。如果我想让管理员通过定义条件来决定何时显示按钮。这将增加系统的灵活性。
  • 同样可以通过传递submissionStatus作为模型属性并检查(${submissionStatus eq 'COMPLETE'})来实现。你为什么要在另一个属性中传递这个?如果您仍然想不走寻常路,那么您正在寻找scriptlet。你基本上可以编写java代码来处理你所有的情况
  • submissionStatus 示例只是最终用户可以用来控制显示内容的选项示例之一。使用 scriptlet 是另一种选择,也是上面 Jasper 的建议,用于在将后端条件传递给视图之前对其进行评估。我认为 标签在经过一些初步测试后可能也能正常工作。感谢您的反馈。
猜你喜欢
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 2013-02-20
相关资源
最近更新 更多