我有一个非常巨大的json字符串,我试图通过隐藏的表单方法将它从一个jsp传递到另一个。但是当我在另一个jsp中收到它时,只有一半的字符串出现,我知道它很大。我的results.jsp具有不同的ID,单击它们中的任何一个,都会转到details.jsp,它会将单击的ID和整个字符串通过隐藏形式传递。我认为POST方法对传递的大小有限制,因此不会发送我的整个字符串。

results.jsp

       <head>
            <script type="text/javascript">
                    function submitHiddenForm(Key) {

                   document.getElementById("Key").value = Key;
                   document.myForm.submit();

               }
                </script>
        </head>
    <body>

        <div class="list-group">
            <%
                List<ComparisonResultDTOarr> ls = diff.getComparisonResultDTOarr();

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

        <form action="details.jsp" method="post" name="myForm">
         <input type="hidden" name="Key" id="Key"><br>
         <input type="hidden" name="jsonString" id="jsonString" value=<%=(String)request.getAttribute("jsonstring") %>>
        </form>
    </body>


在我的details.jsp中,我只是在获取参数

<%
String Key = request.getParameter("Key");
String jsonstr = (String)request.getParameter("jsonString");
%>


并在段落中显示jsonstr:

<p><%=jsonstr %></p>


但它不完整,只能部分显示。我知道这有点令人困惑,因此,如果您需要更多详细信息,请告诉我。

附言:我无法使用调度程序,因为它需要单击ID。

最佳答案

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<input
    type="hidden" name="jsonString" id="jsonString"
    value="<c:out value="${jsonstring}">">


当然,HTML属性value需要加引号,而JSP标记<c:out>可以转义要转义的内容,例如字符串中的"。 `将抑制转义。

${jsonString}是EL的表达语言,可以通篇使用,简化一切。

对于很大的字符串,我建议使用其他数据流。也许是带有JavaScript的Ajax,但似乎您需要将先前的JSP修改为仅过去的查询参数左右。

07-24 15:22
查看更多