在 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。