在JSP中将对象作为变量传递

时间:2015-02-27 14:47:51

标签: java jsp tomcat servlets

我正在尝试将一个对象列表从一个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;主机列表为空或为空

任何想法我做错了什么?

1 个答案:

答案 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对象。