【问题标题】:Passing parameter to next JSP page by a 3rd-party-Servlet-generated form通过 3rd-party-Servlet 生成的表单将参数传递到下一个 JSP 页面
【发布时间】:2011-03-30 20:04:19
【问题描述】:

我正在尝试修复我的组织中的旧应用程序中的错误。我需要以动态生成的形式传递一个额外的参数。

page1.jsp

<%
    request.setAttribute("param", param);
    // ...
%>

<form name="xx">   
    ...
</form>   
<jsp:include page="servlet1" />

Servlet1 正在调用另一个Servlet2,而后者又调用Servlet3 将一些代码打印到page1.jsp。生成的 HTML 输出如下所示:

<form name="xx">   
    ...
</form>   
<form name="yy" action="page2.jsp" >   
    ...   
    <input type="submit">   
</form>  

我需要能够将“param”值从page1.jsp 传递到page2.jsprequest.setAttribute() 不工作。 Servlet 类Servlet3 是供应商提供的,因此我无法在表单“yy”中设置隐藏表单变量以将其传递给page2.jsp

我怎样才能以其他方式实现这一目标?

【问题讨论】:

    标签: java jsp servlets parameter-passing


    【解决方案1】:

    您最简单的选择是使用 JavaScript 在表单中添加一个隐藏的输入字段。将以下脚本添加到 JSP 的底部,插入表单的位置之后。

    <script>
        var input = document.createElement("input");
        input.type = "hidden";
        input.name = "param";
        input.value = "${param}";
        document.forms['yy'].appendChild(input);
    </script>
    

    但是,您只取决于最终用户是否支持 JS。唯一的服务器端替代方案是在 HttpServletResponseWrapper 的帮助下自己更改 Servlet3 的输出。

    【讨论】:

    • 不幸的是,表单名称“yy”也是Servlet3生成的..每次都不一样..
    • 如果它始终是文档的最后一种形式,请改用document.forms[document.forms.length - 1]。或者,如果它始终是第二种形式,请改用document.forms[1]。或者,更好的是,继续捕获响应。然后你可以做一个writer.write(servlet3ResponseAsString.replace("&lt;/form&gt;", "&lt;input type=\"hidden\" ... /&gt;&lt;/form&gt;"));
    • @Balusc.. 你对在 page1.jsp 中设置会话属性并在 page2.jsp 中检索它有什么看法。这是个好主意吗?你能验证利弊吗?
    • 当用户在同一个会话中在多个窗口中打开同一个页面并以不同的顺序提交时会失败。
    • @BalusC.. 你的 JS 建议很有魅力.. 非常感谢兄弟
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多