为什么我得到空指针异常:null时从视图与表单url编码获取值



我在Java/html-scala在Play框架编码。

我试图获得一个值从我的视图使用表单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

my input field:

<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"))在同一视图中的数据?

你可以的,朋友!;)

你只需要稍微修改一下你的代码。因为您将表单定义为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. RequestBody API Docs
  2. MultipartFormData API Docs

祝你好运!

最新更新