我正在尝试将一个对象列表从一个JSP页面传递给另一个JSP页面,这是一个弹出式窗口
在我的第一页中,我正在使用此提交
<input type="submit" id="changehost" class="button_host" name="changehost" value="change" onclick='openHostPicker();' />
调用此函数:
function openHostPicker()
{
var url = 'hostSearch.jsp?hostlist='+'<c:out value="${hostlist}"></c:out>';
window.open(url);
}
此父网页的属性&#39; $ {hostlist}&#39; 已由控制器传递给该网页,并且在此阶段已经过验证为非空。< / p>
我想通过&#39;主机列表&#39;对象弹出窗口,用于填充表格。
当我执行代码时,我可以看到url形成为:
http://localhost:8080/mainadmin/hostSearch.jsp?hostlist=[com.webapps.model.Host@2e96277c,com.webapps.model.Host @ 3fa55c9,com.webapps.model.Host @ 28160129,com.webapps.model.Host @ 3ca63f4e,com.webapps.model.Host @ 468638fd] < / p>
但是我的弹出页面没有结果。 这是代码:
<c:forEach items="${hostlist}" var="host">
<tr>
<td style="border:1px solid black;"><c:out value="${host.getIdHost()}" /></td>
<td style="border:1px solid black;"><c:out value="${host.getContactName()}" /></td>
<td style="border:1px solid black;"><c:out value="${host.getAddress()}" /></td>
<td style="border:1px solid black;"><c:out value="${host.getLocation()}" /></td>
<td style="border:1px solid black;"><Button type='submit' name='hostrefNo' value='${host.getIdHost()}'>Select</button></td>
</tr>
</c:forEach>
我在页面中放了一个小验证测试
<c:if test="${empty hostlist}">
hostlist is empty or null.
</c:if>
<c:if test="${not empty hostlist}">
hostlist is NOT empty or null.
</c:if>
报告&#39;主机列表为空或为空
任何想法我做错了什么?
答案 0 :(得分:0)
在您的父JSP中,将hostlist
设置为session
<c:set var="hostlist" value="${hostlist}" scope="session" />
由于弹出页面请求将作为新的HttpServletRequest
,因此需要将请求中收到的列表移至Session
。
然后该列表可用于弹出窗口中的<c:forEach>
标记。 href
链接不应再传递hostlist
查询参数。
function openHostPicker()
{
window.open('hostSearch.jsp');
}
您当前的方法不起作用,因为只有字符串可以作为查询参数传递给服务器。无法通过请求参数正确地序列化/反序列化Java对象。