Question

Je suis un peu d'un débutant au cadre de lecture, mais je ne vois pas de documentation sur la façon d'aborder ce sujet. Fondamentalement, j'ai un formulaire pour télécharger un fichier texte sur le serveur, voici l'extrait pertinent:

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

Du côté du contrôleur, voici la méthode de téléchargement:

public static void upload(File sprocketFile) {
}

Mon problème est que si l'utilisateur ne prend pas la peine peuplant la forme et frappe juste « Soumettre Sprocket », Jouer génère automagiquement un NPE comme il tente de convertir les données de formulaire dans un fichier. Comment puis-je contourner cela? Cela se produit avant même le code de validation du contrôleur entre en jeu, donc tout simplement jeter dans un @Required ne permet pas:

@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

Mon objectif final est de montrer un joli message d'erreur à l'utilisateur, mais le jeu me empêche de le faire. Ceci est avec le jeu 1.1 sur OS X si cela fait une différence.

Était-ce utile?

La solution 3

J'ai trouvé la source du problème, et il est de ma faute. La question à l'est naturellement partie de la source que je ne mentionnaient pas la question initiale. Voici l'exemple de code:

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();
}

La question utilisait la sprocketFile comme le dernier paramètre dans validation.addError (). J'ai découvert ce lors de l'exécution de l'application en mode débogage dans NetBeans. Merci pour votre @niels d'aide.

Autres conseils

solution possible serait un @ Avant-Interceptor. Là, vous pouvez vérifier la paramter et rediriger vers une page d'erreur. Cela devrait fonctionner. S'il vous plaît créer un billet http://play.lighthouseapp.com avec une petite application par exemple.

Vous formez et le contrôleur ne correspondent pas

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

indique que vous téléchargez un fichier objet à une variable nommée sprocketFile

Mais, votre code dit que vous stockez dans un objet licenceFile nommé

public static void upload(File licenseFile) {

Essayez de faire les deux correspondent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top