我有点新手在游戏框架,但我没有看到如何处理这个任何文件。基本上,我有一个表格到一个文本文件上传到服务器,这里的相关片段:

#{form @Sprockets.upload() , enctype:'multipart/form-data' }
  <input type="file" name="sprocketFile" size="chars" />
  <input type="submit" value="Submit Sprocket" />
#{/form}

在控制器侧,这里的上传方法:

public static void upload(File sprocketFile) {
}

我的问题是,如果用户不打扰填入表格,只需点击“提交链轮”,扮演它试图将表单数据转换为文件自动地生成一个NPE。我怎样才能解决此问题?这种情况甚至在控制器验证代码踢之前,所以只需在一个投掷@Required没有帮助:

@64m30kf1p
Internal Server Error (500) for request POST /sprockets/upload

Oops: NullPointerException
An unexpected error occured caused by exception NullPointerException: null

play.exceptions.UnexpectedException: Errors serializationProblem
    at play.data.validation.ValidationPlugin.save(ValidationPlugin.java:146)
    at play.data.validation.ValidationPlugin.onActionInvocationResult(ValidationPlugin.java:65)
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:293)
    at Invocation.HTTP Request(Play!)
Caused by: java.lang.NullPointerException
    at play.data.validation.ValidationPlugin.save(ValidationPlugin.java:136)
    ... 3 more

我的最终目标是展示一个漂亮的错误信息返回给用户,但玩的就是阻止我这样做。这与播放1.1在OS X上,如果它有差别。

有帮助吗?

解决方案 3

我已经找到了问题的根源,这是我自己的错。眼下的问题自然是我没有在原来的问题包括源的一部分。这里的示例代码:

public static void upload(@Required File sprocketFile) {
try {           
  if (sprocketFile == null || validation.hasErrors()) {
    validation.addError("Upload Error", "Please select a sprocket to upload", sprocketFile);
    params.flash();
    validation.keep();                          
    index();
}

问题是使用sprocketFile如validation.addError最后一个参数()。我发现这一点的同时运行在调试模式下的应用程序在NetBeans。感谢您的帮助@niels。

其他提示

可能的解决方法是一个@拦截之前。在那里,你可以检查放慢参数和重定向到一个错误页面。这应该工作。请建立在 http://play.lighthouseapp.com 票证具有小示例应用程序。

您形成和控制器不匹配

<input type="file" name="sprocketFile" size="chars" />

说您要上传File对象名为sprocketFile变量

但是,你的代码说你是存储在一个名为licenceFile对象

public static void upload(File licenseFile) {

尝试使这两个相匹配。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top