2

我在 Play 框架中使用 Java/html-scala 进行编码。

我正在尝试使用编码的表单 url 从我的视图中获取一个值,但我得到的只是空指针异常。在我的控制器中,我这样做:

String[] searchTag= request().body().asFormUrlEncoded().get("questionTag"); //this is where I get my null pointer exception
//questionTag is the name of my input field in the view

在我看来:在我看来,我有:

@helper.form(action=routes.TeacherController.ValidateQuestion(), 'enctype -> "multipart/form-data", 'class -> "form-horizontal") {... //rest of my code

我的输入字段:

<input name="questionTag" class="input-xxlarge">

在同一个视图中,我允许用户上传一个文件,然后我在控制器的相同函数中获取该文件:

Http:MultipartFormData body = request().body().asMultipartFormData();
Http.MultipartFormData.FilePart attachment = body.getFile("attachment");

我想知道这是否可能导致此异常,即我无法使用两种方法(multipart/form-data 并asFormUrlEncoded().get("questionTag"))在同一视图中获取数据?

4

1 回答 1

0

你可以做到的,朋友!;)

您只需要对代码进行一点修改。因为您将表单定义为multipart/form-data,所以您应该在控制器中进行如下处理:

// get all request content as MultipartFormData
Http.MultipartFormData formData = request().body().asMultipartFormData();

// get the form data
Http.MultipartFormData.FilePart attachment = formData.getFile("attachment");
String[] searchTag = formData.asFormUrlEncoded().get("questionTag"); // works!!

请注意,在formData变量上,也调用asFormUrlEncoded()了这样的方法。它将您的multipart-form.

不要与方法混淆,RequestBody.asFormUrlEncoded()因为 API 说,它用于将请求内容解析为 URL 格式编码。

我希望,下面的 API 参考可以供您参考:

  1. RequestBodyAPI 文档
  2. MultipartFormDataAPI 文档

祝你好运!

于 2013-04-23T00:08:32.177 回答