java - 在jsp表达式中从foreach访问变量
问题描述
我想对遗留的 JSP Tiles 应用程序做一个小的改动。我想显示用 Java 计算的作业类型。所以我添加了 JSP 代码片段,因为我无法轻易修改传递的 Java 对象:
<%@ page import="com.web.controller.JobsHelper" %>
<c:forEach var="job" items="${scheduledJobs}">
<c:set var="job" value="${job}"/>
<tr>
<td><a href="${detailURL}${job.id}">${job.name}</a></td>
<td>${job.description}</td>
<td><%= JobsHelper.getJobType(job) %></td>
但它因编译错误而失败:
An error occurred at line: 90 in the jsp file: /tiles/job/overview.jsp
job cannot be resolved to a variable
89: <td>${job.description}</td>
90: <td><%= JobsHelper.getJobType(job) %></td>
问题出在哪里?
解决方案
好的,解决方案是引入 JSTL 函数作为标签库
WEB-INF/functions.tld
<?xml version="1.0" encoding="UTF-8" ?>
<taglib
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<tlib-version>1.0</tlib-version>
<short-name>Custom_Functions</short-name>
<uri>http://company.com/functions</uri>
<function>
<name>jobType</name>
<function-class>com..JobsHelper</function-class>
<function-signature>java.langString getJobType(com..model.RunRecord)</function-signature>
</function>
</taglib>
JSP
<%@taglib uri="http://company.com/functions" prefix="func" %>
<td>
${func:jobType(job)}
</td>
推荐阅读
- java - 无法运行 Cucumber 文件
- python - 字符串类型的排序列表,包含电子邮件域名
- simulation - 使用 FMU 容器的 ModelStructure/Outputs 错误
- javascript - 返回(或映射)Javascript + React后添加类
- arrays - 动态分配二维字符数组,并创建自身的副本
- makefile - 忍者:错误:build.ninja:6:预期的“命令=”行
- r - BlueSky Statistics (Open Source 64bit) v7.20 error "could not find function "BSkyOpenNewDataset"
- ios - Flutter ios“无法为模拟器构建应用程序。”
- reactjs - 在 React Native 中编辑/处理音频的最佳方法是什么?
- html - Flex-wrap:nowrap 无法正常工作