0

我想在提交表单之前将当前表单对象设置为会话参数。可以吗?

<html>
<head>
Title 
</head>
<body>
<FORM method="test" name="test" enctype="multipart/form-data" action="sample.jsp" >
<select name="test" id="test"> 
<option>1</option>
<option>2</option>
</select>
<input type="submit" value="Submit">
</form>
</body>
</html>

我想在提交表单之前在会话中设置选择选项测试。是否可能。我不能使用请求,因为多部分实现中存在一些缺陷。

4

3 回答 3

2

我不能使用请求,因为多部分实现中存在一些缺陷。

那么你的实际问题是你使用了一个糟糕的实现。Servlet API 默认不支持请求编码,multipart/form-data您不会在请求参数映射中看到任何内容。要检索上传的文件和其他请求参数,您需要自己解析InputStreamHttpServletRequest但幸运的是,有一个常用的 API 可以帮助您完成宝贵而繁琐的工作:Apache Commons FileUpload在他们的主页上,您可以在用户指南常见问题部分中找到大量代码示例和重要提示和技巧。仔细阅读它们。基本上,您只需InputStream要从FileItem对象中获取并使用通常的方式将其写入任何OutputStream您喜欢的Java IO方式。您甚至可以FileItem#write()为此使用简写。

如有必要,您还可以编写一个在后台Filter使用 Apache Commons FileUpload 的代码,并检查每个请求是否存在multipart/form-data,如果是,则在 Commons FileUpload 的帮助下将参数放回请求参数映射中,并将上传的文件(或exceptions) 作为请求属性,因此它最终在您的 servlet 代码中更加透明。你可以在这里找到一个基本的例子来理解这个想法。

总结:不要发明变通办法/黑客来“解决”这个问题。确保不要使用 Ajax 在会话中设置请求参数,同时以任何方式将它们发送到服务器端。只需使用正确的解决方案来解决问题。使用一个好的multipart/form-data解析器。

希望这可以帮助。

于 2009-12-05T19:56:45.090 回答
0

我觉得没有,这根本不是好主意。会话应始终在服务器端完成。因此,当请求到达服务器时,您可以执行所有与会话相关的事情。

于 2009-08-20T12:20:18.320 回答
0

您可以使用 Ajax 与服务器通信。我不明白您是想要会话中的所有表单还是只想要测试组合的值?!如果它只是测试组合的值,那么您可以从页面获取该值并将其异步(无论何时)提交给服务器,以接收请求的某个操作,提取测试值并将其保存在会话中。当您以正常方式提交表单时,它将在那里。

使用 Ajax 是一种解决方案,但对于可能是简单操作的事情来说,它是一个复杂的解决方案。正如其他人所说,这不是一个好主意。

你为什么想要这种行为?你到底想做什么?

于 2009-08-20T12:36:21.167 回答