在 JSP 中将对象作为变量传递
Passing object as variable in 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);
}
此父页面有一个属性 '${hostlist}',该属性已由控制器传递给该页面,并在此阶段验证为不为空。
我想将 'hostlist' 对象传递给弹出窗口,它将用于填充 table.
当我执行代码时,我可以看到 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]
但是我在弹出页面中没有得到任何结果。
这是代码:
<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>
哪个报告 'hostlist is empty or null'
知道我做错了什么吗?
在你的父 JSP 中将你的 hostlist
设置为 session
as
<c:set var="hostlist" value="${hostlist}" scope="session" />
因为弹出页面请求将作为一个新的 HttpServletRequest
,这需要将请求中收到的列表移动到 Session
。
该列表随后应可用于弹出窗口中的 <c:forEach>
标记。 href
link 不应再传递 hostlist
查询参数。
function openHostPicker()
{
window.open('hostSearch.jsp');
}
您当前的方法不起作用,因为只能将字符串作为查询参数传递到服务器。 Java 对象无法通过请求参数正确 serialized/deserialized。
我正在尝试将对象列表从一个 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);
}
此父页面有一个属性 '${hostlist}',该属性已由控制器传递给该页面,并在此阶段验证为不为空。
我想将 'hostlist' 对象传递给弹出窗口,它将用于填充 table.
当我执行代码时,我可以看到 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]
但是我在弹出页面中没有得到任何结果。 这是代码:
<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>
哪个报告 'hostlist is empty or null'
知道我做错了什么吗?
在你的父 JSP 中将你的 hostlist
设置为 session
as
<c:set var="hostlist" value="${hostlist}" scope="session" />
因为弹出页面请求将作为一个新的 HttpServletRequest
,这需要将请求中收到的列表移动到 Session
。
该列表随后应可用于弹出窗口中的 <c:forEach>
标记。 href
link 不应再传递 hostlist
查询参数。
function openHostPicker()
{
window.open('hostSearch.jsp');
}
您当前的方法不起作用,因为只能将字符串作为查询参数传递到服务器。 Java 对象无法通过请求参数正确 serialized/deserialized。