2013-04-22 43 views
2

我在Play框架中编写Java/html-scala。为什么我得到空指针异常:从表单url编码的视图获取值时为空?

我想从我的视图使用表单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"))在同一视图中?

回答

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. RequestBody API Docs
  2. MultipartFormData API Docs

祝你好运!