我有一个非常巨大的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修改为仅过去的查询参数左右。