如何在JSP页面的forEach循环中将不同的URL链接到不同的项目?

时间:2015-01-20 09:02:55

标签: java jsp jstl

我有一个facultylist.jsp页面,在forEach循环中显示List<Faculty>作为请求属性参数,我希望此循环中的每个项目都是指定教师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,servlets和log4j。在我的项目中,我有一个FrontController,它是一个与Command模式交互的servlet - 每个Command返回资源和操作类型的路径:转发或重定向。

3 个答案:

答案 0 :(得分:1)

您可以通过向链接添加查询参数来解决您的问题,并根据评论进行编辑。请注意,您无法直接访问位于 WEB-INF 文件夹下的JSP页面。另外,要正确编码参数,更好地构建URL

<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通信应解决您的直接问题,但真正正确的方法是将教师 id 传递给servlet,获取教师实例,放置在模型中并传递给视图。

答案 1 :(得分:0)

如果您在Faculty实体中只有一个字段:

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

@Mark:faculty代表一个来自数据库的实体,我不确定我是否想要更改它添加另一个字段,或者你的意思是其他方式?

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

public class FacultyFormHelper extends Faculty implements Serializable {

    private String URL;

并在您看来:

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

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

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

然后检索数据...... 我不确定你是如何从视图中的变量,ajax调用或任何地方获取网址 的这个网址......

答案 2 :(得分:0)

以其他方式只是从下拉列表中选择一个名称并将其转发到前端控制器servlet,使用if else条件并依赖于您可以将请求转发到相应的jsp或servlet的值

<select name="value"> in jsp 

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

if()
else if()