【问题标题】:Pass a List to another jsp file将 List 传递给另一个 jsp 文件
【发布时间】:2009-10-08 16:10:21
【问题描述】:

我想将主 JPS 中的 List 类型对象传递给包含 JSP ( jsp:include)。由于 parm 只支持字符串,我不能使用 parm 标签将 List 类型的数据传递给包含文件。

使用示例:

<jsp:include page="/jsp/appList.jsp">
     <jsp:param name="applications" value="${applications}"/>
</jsp:include>

或者:

<jsp:include page="/jsp/appList.jsp">
     <jsp:param name="applications" value="${confirmed_applications}"/>
</jsp:include>
<jsp:include page="/jsp/appList.jsp">
    <jsp:param name="applications" value="${unconfirmed_applications}"/>
</jsp:include>
<jsp:include page="/jsp/appList.jsp">
    <jsp:param name="applications" value="${canceled_applications}"/>
</jsp:include>

我可以创建一个简单的标记处理程序,但我想知道是否有更简单的方法。

【问题讨论】:

    标签: java jsp


    【解决方案1】:

    同意 ChssPly76,如果 List 是在 JSP 中生成的,这可能是一个麻烦的迹象,但是将对象获取到另一个 JSP 的另一种方法是使用 scriplet 将其添加到 HttpServletRequest 对象属性字段:

    带有列表的 JSP:

    <%
    request.setAttribute("theList", ListObject);
    %>
    

    另一个JSP:

    <%
    List myList = (List) request.getAttribute("theList");
    %>
    

    【讨论】:

      【解决方案2】:

      这确实是 jsp 标签的意义所在。您创建一个接受 属性(不是参数)的 .tag 文件,它可以是任意类型。

      请参阅this article 以获得良好的教程。

      “参数”类似于您在 HTTP 查询中看到的参数(URL 中“?”之后的部分)。

      【讨论】:

      • 我不知道可以在纯 JSP 中创建标记库。好人!谢谢!
      • 是的,这很好用。小提示:重要的部分是将属性的 type 设置为 Object,否则将被视为 String。 &lt;%@ attribute name="answers" required="true" type="java.lang.Object" %&gt;
      【解决方案3】:

      您如何在主 JSP 中获得该列表?

      如果您从模型中获取它(直接/间接请求/会话属性),您可以将属性的 name 传递给包含的 JSP 并从那里的模型中重新获取它:

      <jsp:include page="/jsp/appList.jsp">
        <jsp:param name="applications" value="confirmedApplications"/>
      </jsp:include>
      

      如果您在 JSP 本身中生成或修改该列表,那么您确实遇到了更大的问题 :-) 但您可以绑定您的列表以在某个属性名称下请求,然后使用上述方法。

      【讨论】:

        【解决方案4】:

        假设您将列表放入请求范围并使用applications 作为参数名称,您可以像这样引用列表${requestScope[param.applications]}

        【讨论】:

          【解决方案5】:

          您可以通过 requestScope 传递 List 对象:

          <c:set var="listApplications" value="${applications}" scope="request"/>
          <jsp:include page="/jsp/appList.jsp" />
          

          在 appList.jsp 中,您可以使用

          检索列表
          ${requestScope.listApplications}
          

          【讨论】:

            【解决方案6】:

            您可以使用请求或会话对象来传输对象。

            优势

            请求 - 使用请求,因为它的生命周期比会话对象短。

            会话 - 您可以稍后在另一个页面或操作中检索相同的对象

            【讨论】:

              【解决方案7】:

              假设您有 parent.jsp 和 child.jsp。

              你想:

              1) 包含来自 parent.jsp 的 child.jsp, 2) 将一些参数从 parent.jsp 发送到 child.jsp。

              执行以下步骤:

              1) 在 parent.jsp 中 `

              <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
              
              <c:set var="items" value="${itemsFromDB}" scope="request"/>
              <jsp:include page="child.jsp"/>
              

              ` 2)在child.jsp中

              <div>
              alert("${requestScope.items}");
              </div>
              

              仅此而已。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-10-09
                • 2020-09-13
                • 1970-01-01
                • 2014-01-12
                • 2015-05-22
                相关资源
                最近更新 更多