首页 > 解决方案 > 在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>

问题出在哪里?

标签: javajsp

解决方案


好的,解决方案是引入 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>

推荐阅读