如何 link 在 JSP 页面的 forEach 循环中将不同的 URL 指向不同的项目?

How to link different URLs to different items in forEach loop in JSP page?

我有一个 facultylist.jsp 页面,它在 forEach 循环中显示 List<Faculty> 作为请求属性参数,我希望此循环中的每个项目都是 link 指定的教员 facultyview.jsp。我怎样才能做到这一点?

facultylist.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Faculties</title>
</head>
<body>
<h1>Faculties list</h1>
    <ul>
        <c:forEach var="faculty" items="${faculties}">
            <li><a href="???">${faculty.name}</a></li>
        </c:forEach>
    </ul>
</body>
</html>

facultyview.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Faculty</title>
</head>
<body>
    <h1>${faculty.name}</h1>
    <ul>
        <li>Faculty name: <c:out value="${requestScope.name}"></c:out></li>
        <li>Total seats: <c:out value="${requestScope.total_seats}"></c:out></li>
        <li>Budget seats: <c:out value="${requestScope.budget_seats}"></c:out></li>
    </ul>
    <a href="faculty?apply">apply for this faculty </a>
</body>
</html>

我不知道它是否有帮助,但我正在使用以下技术:tomcat、jsp、servlet 和 log4j.In 我的项目 我有一个 FrontController,它是一个与命令模式交互的 servlet - 每个命令 returns 一个资源路径和操作类型:转发或重定向。

如果您在 Faculty 实体中有一个简单的字段:

<a href="${faculty.url}">${faculty.name}</a>

@Mark: faculty represents an entity from database, i'm not sure if I want to change it adding another field, or you mean some other way ?

添加字段并不意味着您必须更改数据库,您可以拥有一个继承自 Faculty 的 Helper 实体并拥有更多您可能需要的字段,

public class FacultyFormHelper extends Faculty implements Serializable {

    private String URL;

在您看来:

<a href="${facultyHelper.url}">${facultyHelper.name}</a>

但是,如果您不想修改数据库,可以创建一个助手 class,您可以将 onclick 事件添加到 <a>

<a onclick="goToURL(${faculty.id})">

然后检索数据...我不确定您是如何获取 URL... 从查看、ajax 电话或任何有此 URL...

的地方

换句话说,就是从下拉列表中选择一个名称并将其转发给前端控制器 servlet,使用 if else 条件并取决于您可以将请求转发给相应的值 jsp 或小服务程序

<select name="value"> in jsp 

String value=req.getParameter("value");   in servlet

if()
else if()

您可以通过向 link 添加查询参数来解决您的问题,根据评论进行编辑。请注意,您无法直接访问位于 WEB-INF 文件夹下的 JSP 页面。另外,为了正确编码参数,最好构造 url like

<c:url value="facultyview.jsp" var="url">
  <c:param name="name" value="${faculty.name}"/>
  <c:param name="total_seats" value="${faculty.total_seats}"/>
  <c:param name="budget_seats" value="${faculty.budget_seats}"/>
</c:url>
<li><a href="${url}">${faculty.name}</a></li>

并且比在你的 facultyview.jsp 中读取的查询参数

<li>Faculty name: ${param.name}</li>
<li>Total seats: ${param.total_seats}</li>
<li>Budget seats:${param.budget_seats}</li>

这种直接的 JSP 交流应该可以解决您眼前的问题,但真正正确的方法是传递 faculty[=] 的 id 23=] 到 servlet,获取 faculty 实例,放置在模型中并传递给视图。