【问题标题】:Data from JSP 1 to JSP 2从 JSP 1 到 JSP 2 的数据
【发布时间】:2015-09-16 17:53:46
【问题描述】:

我试图将两个值从 JSP1 传递到 JSP2。我在 JSP1 和 JSP2 中使用下面给出的代码。我想在 JSP2 中显示键和值的值,但是下面“输出”部分中给出的输出正在显示。我希望将这些值传递给 JSP2 以对它们执行一些逻辑。我想在 JSP2 中的逻辑被执行后回到 JSP1。

所以 JSP1 从 Java 中的 Controller 类中获取值。 JSP1 中有一个循环,JSP2 在 JSP1 的循环内被调用。现在我无法访问从循环传递的值,但我能够访问从控制器类发送到 JSP1 和 JSP2 中的 JSP1 的值。所以这个问题是由于循环中的值没有被传递给 JSP2 引起的。

JSP1

<% request.setAttribute("key", "${entityitem.key}"); %>
<% request.setAttribute("value", "${entityitem.value}"); %>
<jsp:include page="JSP2.jsp"/>

JSP2

<%= request.getAttribute("key") %>  :    <br>
<%= request.getAttribute("value") %>

输出:

${entityitem.key}
${entityitem.value}

期望的输出:

中的值
${entityitem.key}
${entityitem.value}     

【问题讨论】:

  • 请解释一下?
  • 我能够解决这个问题。我已经在答案部分发布了代码

标签: java jsp jstl


【解决方案1】:

我可以使用下面的代码在 JSP2 中的 JSP1 中访问循环中的值。

JSP1 中的代码:

<jsp:include page="JSP2.jsp">
<jsp:param name="listKey" value="${entityitem.key}"/>
<jsp:param name="listValue" value="${entityitem.value}"/>
</jsp:include>

JSP2 中的代码:

 ${param.listKey}

【讨论】:

    【解决方案2】:

    您是在提交请求后尝试获取这些值吗? 如果不是,您应该在 JSP2 中使用 ${entityitem.key}${entityitem.value}

    如果你提交它并且你想访问变量,你需要一个转发而不是重定向请求,否则变量将被删除,因为你会得到一个新的请求。

    在这种情况下,您应该检查是否正确初始化了变量,并尝试使用request.getSession().setAttribute() 而不是request.setAttribute() 来检查变量是否正确传递。

    【讨论】:

    • 我想将这些值从 JSP1 发送到 JSP2 以便在 JSP2 中执行一些逻辑,然后我想控制回到 JSP1 来执行一些其他逻辑。
    • 所以 JSP1 从 Java 中的 Controller 类中获取值。 JSP1 中有一个循环,JSP2 在 JSP1 的循环内被调用。现在我无法访问从循环传递的值,但我能够访问从控制器类发送到 JSP1 和 JSP2 中的 JSP1 的值。所以这个问题是由于循环中的值没有被传递给 JSP2 引起的。
    【解决方案3】:

    您想将值从一个 jsp 发送到另一个 jsp,但问题是这两个页面将如何相互通信?如果没有,您必须将一个 jsp 调用到另一个 jsp 中,您可以设置会话变量并尝试在另一个变量中查找值。你在这里做同样的事情,但问题是在会话集属性中你没有使用 el 表达式设置值,你正在传递字符串。

    你可以使用cookies,你可以在下一个jsp中使用该值。如果可能,请使用 requestdispatcher,因为它比一切都好。

    【讨论】:

    • JSP1 从 Java 中的 Controller 类中获取值。 JSP1 中有一个循环,在 JSP1 的循环中调用 JSP2。现在我无法访问从循环传递的值,但我能够访问从控制器类发送到 JSP1 和 JSP2 中的 JSP1 的值。所以这个问题是由于循环中的值没有被传递给 JSP2 引起的。我正在使用 - 在 JSP1 中调用 JSP2。我是否能够使用 cookie/请求调度程序访问 JSP2 中 JSP1 中的循环值?
    【解决方案4】:

    请检查以下事项

    请确保从您的 jsp 页面中删除此行

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    

    并确保您使用的是 servlet 2.4 或更高版本

    在您的情况下,如果您想传递一些值,请不要包含 jsp 页面。而是使用 request.getRequestDispatcher() 重定向到第二个 jsp 页面并使用相同的 requestdispatcher 从第二个 jsp 页面传递值,我认为您将获得值

    【讨论】:

      【解决方案5】:

      您已将您的JSP2.jsp 包含在您的JSP1.jsp 中。在编译时,这些 jsp 在浏览器中被编译并呈现为单页。

      因此,无需在 Request 范围内再次设置 Objects,您可以像在 JSP1.jsp 中一样直接在 JSP2.jsp 中访问它们。

      像在JSP2.jsp中一样直接访问它

      旁注:避免使用脚本,阅读How to avoid Java code in JSP files?

      【讨论】:

      • 我之前尝试过,但没有成功。我现在会重试。我应该使用 - 在我的 JSP1 中调用 JSP2 吗?
      • 你可以这样写,也可以写成&lt;%@ include file="relative url" &gt;。我猜你的页面有 EL disabled 。请检查您是否有此行 &lt;%@ page isELIgnored="false" %&gt; ,如果有,请删除它
      • 试过了,我没有得到 JSP2 中的值。 :( 我从 JSP1 中的循环中获取 ${entityitem.key} ${entityitem.value} 值,并将它们传递给 JSP2。这是问题所在吗?如果它们正在访问,我是否能够访问 JSP2 中的值从 JSP1 中的循环发送。我想理论上它应该可以工作。
      • 如果第二个页面包含在第一个jsp中,则无需显式传递对象,直接访问即可
      • 好的。我确实尝试访问它们。我在 JSP2 中做 ${entityitem.key} :
        ${entityList} 并且它只是打印:即使 entityitem.key 和 entityitem.value 中有值
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 2013-11-11
      • 2013-12-07
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多