我有一个非常大的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>
但它是不完整的,只有部分显示。我知道这有点令人困惑,所以如果你需要更多细节,请让我知道。
P.S -I不能使用dispatcher,因为它需要在ID上单击。
发布于 2014-07-01 07:15:14
<%@ 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修改为仅使用过去的查询参数。
发布于 2014-07-01 11:43:09
考虑到Joop Eggen之前的回答和对答案的评论,我认为问题可能如下:
JSON数据是将数据传递到页面的一种选择
我建议的第一种方法是因为你有没有转义的JSON字符串,当将它显示为HTML时,它可能会丢失。在这种情况下,您需要小心,以便在传递它的JSP和HTML上下文中正确地转义它。对于我的JSON数据,我就遇到过这个问题。我选择了避开JSON数据。此外,我建议在日志中多次打印数据,以确认其存在。如果数据很大,请确认其长度。
第二种方法,我从你的对话中得到的另一种方法是使用会话来存储字符串数据。如果您必须多次使用数据,请将其保留在会话中,这将很容易处理。
您的解决方案将是上述两种方法的组合。如果你同时使用它们,你可以很容易地做到。
https://stackoverflow.com/questions/24504298
复制