سؤال

أنا مبتدئ قليلاً في إطار اللعب ، لكنني لا أرى أي وثائق حول كيفية التعامل مع هذا. في الأساس ، لدي نموذج لتحميل ملف نصي على الخادم ، إليك المقتطف ذي الصلة:

#{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) {
}

مشكلتي هي أنه إذا لم يكلف المستخدم عناء ملء النموذج ويضرب فقط "إرسال Substrocket" ، فإن تشغيل 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

هدفي النهائي هو إظهار رسالة خطأ جميلة إلى المستخدم ، لكن اللعب يمنعني من القيام بذلك. هذا مع Play 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 كمعلمة الأخيرة في التحقق من الصحة. adderror (). لقد اكتشفت هذا أثناء تشغيل التطبيق في وضع التصحيح في NetBeans. شكرا لمساعدتك @نيلز.

نصائح أخرى

سيكون الحل الممكن أن يكون @قبل التحمل. هناك يمكنك التحقق من paramter وإعادة التوجيه إلى صفحة خطأ. هذا يجب أن يعمل. الرجاء إنشاء تذكرة في http://play.lighthouseapp.com مع تطبيق مثال صغير.

لا تتطابق معها ووحدة التحكم

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

يقول أنك تقوم بتحميل كائن ملف إلى متغير اسمه sprocketFile

لكن الكود الخاص بك يقول إنك تخزن في كائن اسمه licenceFile

public static void upload(File licenseFile) {

حاول صنع المباراة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top