【问题标题】:Pass data from one jsp to another and display that jsp view将数据从一个 jsp 传递到另一个 jsp 并显示该 jsp 视图
【发布时间】:2014-06-19 09:44:10
【问题描述】:

嘿,我是一名 php 开发人员,这是我第一次使用 jsp。现在我从我的班级中检索了一个 Json 字符串并将其转换为 GSON。我在我的result.jsp 中显示一个字段,例如:- ID 并单击 id 它应该转到details.jsp 并显示有关该 ID 的更多信息

目前我的result.jsp如下:-

<html>
<body>
     <div class="list-group">
                <% 
                   String json = (String)request.getAttribute("jsonstring");
                    Gson gson = new Gson();
                    ConCom diff = new ConCom();
                    diff = gson.fromJson(json, ConCom.class);
                    List<ComparisonResultDTOarr> ls = diff.getComparisonResultDTOarr();

                    for(int i = 0;i<ls.size();i++)
                    {
                        List<AuditItemLogsDTOArr> lsinner = ls.get(i).getAuditItemLogsDTOArr();
                        %><a href="#" class="list-group-item">
                        <%out.println(lsinner.get(0).getKeyAsString());%></a><%
                    }
                    %>
                  </div>
</body>
</html>

我阅读了 SO 并用 google 搜索并了解到我可以制作一个隐藏的表单。现在我创建一个包含以下两个字段的表单,并使用我提交表单的锚标记。但是表单中的值需要根据点击的ID发布,我怎样才能让它动态呢?

所以如果我的表格如下:-

<form action="details.jsp" method="post">
First name: <input type="text" name="firstname"><br>
Last name: <input type="text" name="phone">
</form>

我的 details.jsp 会是这样的:-

<%= request.getParameter("firstname") %>
<%= request.getParameter("phone") %>

我希望根据点击的 ID 和要提交的表单设置名字和电话。我可以从这个页面中的 diff 对象中获取字符串/整数值。我需要使用 JQuery 吗?有什么帮助吗?

我也知道我应该使用 JSTL。我很快就会做到这一点。谢谢。

【问题讨论】:

    标签: java javascript jquery jsp


    【解决方案1】:

    您可以在锚标记的 onclick 事件期间调用 javascript 函数:

        <a href="#" onclick="submitHiddenForm("<%=lsinner.getFirstName()%>", "<%=lsinner.getPhone()%>");">...
    

    你的 JS 函数想要:

       function submitHiddenForm(firstName, phone) {
    
           document.getElementById("firstname").value = firstName;
           document.getElementById("phone").value = phone;
           // attach a name attribute to your form tag
           // submit the form
           document.myForm.submit();
       }
    

    我希望这会有所帮助。

    编辑: 将 diff 更改为 lsinner,因为这是循环中使用的 var。

    【讨论】:

    • 谢谢!这正是我正在寻找的,只是一个问题。假设某些 ID 的用户有两个电话号码而不是 1 个,有什么建议可以处理吗?
    • 对于初学者来说,您应该在隐藏表单中准备一个额外的文本字段 (id=phone2?) 并在 details.jsp 上适当地处理它。您可以修改 submitHiddenForm javascript 函数并添加另一个电话参数。在 onclick 调用中,只需正确填充 phone2 的插槽(如果为空,则提供 null 或空字符串)。同样,您必须在 details.jsp 上处理不同类型的 phone2 输入:)
    • 最后一个问题,在我的servlet中,我基本上将字符串发送到result.jsp,我可以同时将它发送到details.jsp吗?喜欢只将视图转发给结果,但将响应传递给结果和详细信息?
    • 当然。正如@Lakshmi 所述,您可以在表单中添加另一个隐藏文本字段:。当您将此表单提交到 details.jsp 时,您可以通过以下方式访问 json 字符串:request.getParameter("jsonString");
    • 所以我实现了上面的代码,当我点击任何 ID 时,我不知道 JS 函数是否真的被执行了,它也没有将我的视图转发到 details.jsp,我需要为此添加额外的js吗?
    【解决方案2】:

    点击 ID 调用一个 javascript 函数,传递函数内部的值,您可以通过获取每个元素(如 document.getElementById("firstname").value=value passed)来动态设置表单的值,类似地设置其他字段,最后 document.myform.submit();

    注意,因为我们是通过 ID 获取 HTML 元素,所以你可以使用

    <form action="details.jsp" method="post" name="myform">
    First name: <input type="hidden" name="firstname" id="firstname"><br>
    Last name: <input type="hidden" name="phone" id="phone">
    </form>
    

    type="hidden" 将隐藏元素。 检查这些以获得更好的理解。

    How to submit a form using javascript?

    【讨论】:

      【解决方案3】:

      如果您在 details.jsp 中也有 diff 对象,那么在普通链接中仅传递 ID 作为参数就足够了。

      <a href="details.jsp?id=<%= id %>">details</a>
      

      你可能会在 PHP 中做同样的事情。

      JQuery 是客户端 JavaScript,不需要解决您的问题。

      【讨论】:

      • 不,我在 details.jsp 中没有 diff 对象,但感谢您的建议。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多