【问题标题】:Value passed with request.setAttribute() is not available by request.getParameter()request.getParameter() 无法使用 request.setAttribute() 传递的值
【发布时间】:2011-05-19 22:04:15
【问题描述】:

我在代码的正常执行中给一个字符串变量一个值,但是如果发生异常我会给它另一个值,问题是在catch块中这个值仍然和我首先分配的一样 .

这是我的代码,首先我在 try 块中分配页面值“addUser”,然后在 catch 中给它“ErrorPage”值,我将 http 请求中的页面值发送到 forword 方法,并在其中打印值页。 我在执行代码时导致错误,我希望它通过 catch 块,并且确实如此,但是当它将页面值发送到 forword 函数时,页面的值是“addUser”而不是“ErrorPage”虽然我分配它到“ErrorPage”!!

String page = "addUser";

try {
    // ...

    request.setAttribute("page", page);
    forward(request, response);
} catch (SQLException e) {
    page = "ErrorPage";
    request.setAttribute("page", page);
    forward(request, response);
}

这里是前导函数

String page = request.getParameter("page");
System.out.println("page is " + page); // each time it prints addUSer

有人可以帮忙吗?并提前谢谢。

【问题讨论】:

  • 阅读:en.wikipedia.org/wiki/Don't_repeat_yourself 已经可以消除很多了。
  • 那不会编译。您在 try 块之前在本地定义 page,然后在 try 块内再次重新定义它。那会产生一个编译错误,所以你给我们的代码对于演示这个问题是没有用的。
  • @Mark Peters-我在这里重写了我的代码,我的代码非常大,我只是给你一个我遇到的问题的快照,但是感谢这个注释。

标签: servlets parameters attributes parameter-passing


【解决方案1】:

您正在调用 request.getParameter() 而不是 request.getAttribute() 来获取值。既然你已经把它设置为请求属性,你也应该把它作为请求属性。

所以:

request.setAttribute("foo", foo);

仅适用于

Object foo = request.getAttribute("foo"); // NOT getParameter().

getParameter() 仅用于 HTTP 请求参数,您可以在请求 URL 或 HTML 表单的输入字段中指定。

【讨论】:

  • @BalusC - 没错,但我面临另一个问题,我使用 forward() 方法来处理从 jsp 发送到 servlet 的参数“page”和从 servlet 到 jsp 的属性“page”并且两者都转发到预期的页面!!!当我在转发方法参数表单jsp中制作request.getAttribute()时为null。为forward()制作2个方法是个好主意吗?
  • 不,只是将其作为请求属性传递并访问。不要过度复杂化/重复。
  • @BalusC - 我们可以将值作为属性从 jsp 传递给 servlet 吗?因为我会从输入字段中发送值。
  • 您可以只访问参数作为参数。 JSP EL 中的属性为${page}。我建议通过一本像样的书/教程来学习 JSP/Servlet 基础知识。从这里开始:stackoverflow.com/tags/servlets/info
  • @BalusC-问题是直到现在我在jsp页面中使用,但现在我决定学习JSTL和EL,因为JSTL中有很多设施。
【解决方案2】:

除了BalusC的点”

在您的代码中,您声明了两个“字符串页面”变量。这不会编译。我认为您在 catch 中传递给请求的参数必须是“其他”页面变量。但很难说,因为这不是一个真实的例子。

【讨论】:

  • 这其实不是答案,而是评论。而且,这已经在评论中提到了:)
  • 看到,他发布的代码不是他正在运行的实际代码,这可能是部分或完整的解决方案。我在任何 cmet 到位之前就开始回复此问题并且没有看到 Mark 的评论。
猜你喜欢
  • 2012-05-19
  • 2020-03-06
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
相关资源
最近更新 更多