我在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参考可以供你参考:
-
RequestBody
API Docs -
MultipartFormData
API Docs
祝你好运!