【问题标题】:Method Parameters and JSTL方法参数和 JSTL
【发布时间】:2011-03-24 06:40:04
【问题描述】:

对于带有使用 JSTL 返回列表的参数的方法,“items”属性语法是什么?例如,如果我有一个方法

List<String> fName = null;
public List<String> FirstName(String firstName)
{
    return firstName
}

和一个 JSP

<c:foreach var="something" items="fname">
    ${something}
</c:foreach>

如何为方法提供参数?

谢谢。

【问题讨论】:

  • 您不能在 c:forEach 标签中调用方法。它基本上用于迭代集合。我认为 JSTL 不支持直接从 JSP 调用 java 方法。 JSTL 中没有这样的标签来执行此操作。如果你需要从 JSP 中调用 java 方法,你应该看看 Ajax 或者可能是 DWR。
  • @Ashish 谢谢。我已经通过代码 sn-p 进行了更改,使其更具可读性。我将列表传递给 c:foreach 如果我不需要该方法的参数,它会正常工作。如果方法有参数,你是否熟悉这项工作?

标签: java jsp jstl


【解决方案1】:

这没有多大意义。流程中有问题。您应该在 servlet 中准确准备 JSP 需要的列表。

List<String> firstNames = something.list(firstName);
request.setAttribute("firstNames", firstNames);
request.getRequestDispatcher("result.jsp").forward(request, response);

然后

<c:forEach items="${firstNames}" var="firstName">
    ${firstName}<br/>
</c:forEach>

该列表当然可以是一个 bean 属性,但最重要的是,您只需要确保您想要显示的列表已经在 servlet 中准备好,以便 JSP EL只需将其作为 bean 属性获取即可。


与具体问题无关,在 JSP/EL 2.2(以及 Servlet 3.0)中,可以将参数传递给 bean 方法,但这绝对不是您特定情况下的正确解决方案。

【讨论】:

  • 感谢您的帮助。我的问题是我试图在准备之前将列表发送到 JSP。那天晚些时候我弄清楚了,但是您的帖子帮助我意识到我的“发现”是正确的。谢谢。
【解决方案2】:

如何将变量传递给您的 jstl?

如果您在一个页面中处理这个。这是一个例子

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>
<%@ page isELIgnored="false" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List;" %>
<% 
    List<String> xList = new ArrayList<String>();

    xList.add("a");
    xList.add("b");
    xList.add("c");

    pageContext.setAttribute("sList", xList);
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <c:forEach var="lst" items="${sList}">
        <span>${lst}</span>
    </c:forEach>

</body>
</html>

注意:您应该了解良好的编程习惯。我发布的只是 foreach 打印值的示例。变量可能来自 sevlet。

编辑: 将变量值从 servlet 传递给 jsp。在您的 servlet 中,它可能在 do post 或 do get 或其他具有 HttpServletRequest/HttpServletResponse 的函数中

request.setAttribute("sList", xList);
request.getRequestDispatcher("your.jsp").forward(request, response);

【讨论】:

  • 我有基本的编程知识,这是我遇到问题的 servlet 中的一种方法。该方法接受一个参数并返回一个列表,因此我不确定 c:foreach 中的语法是否应该与您在答案中键入的不同。谢谢。
  • 是的,方式相同。问题可能是您如何将变量值传递给您的 jsp 页面。请参阅编辑后的帖子。如果调用你的jsp页面的过程和我的例子不同,请告诉我。
  • 感谢您的帮助。我需要在将 servlet 发送到 JSP 之前准备好它,然后我可以使用 request.set/getattribute。
猜你喜欢
  • 2011-04-18
  • 2016-09-11
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
  • 2012-10-15
相关资源
最近更新 更多