قراءة قيمة g:datePicker في Grails دون استخدام طريقة "new Object(params)"

StackOverflow https://stackoverflow.com/questions/534330

  •  22-08-2019
  •  | 
  •  

سؤال

لنفترض أن لدي منتقي بيانات يسمى "foobar":

<g:datePicker name="foobar" value="${new Date()}" precision="day" />

كيف أقرأ القيمة المقدمة لمنتقي التاريخ هذا؟

إحدى الطرق الناجحة ولكن لها بعض الآثار الجانبية غير المرغوب فيها هي ما يلي:

def newObject = new SomeClassName(params)
println "value=" + newObject.foobar

تعمل هذه الطريقة على قراءة جميع الحقول المقدمة في newObject وهو أمر أريد تجنبه.أنا مهتم فقط بقيمة حقل "foobar".

الطريقة التي افترضت في الأصل أنه يمكن القيام بذلك هي:

def newObject = new SomeClassName()
newObject.foobar = params["foobar"]

لكن يبدو أن Grails لا تقوم تلقائيًا بترجمة حقل foobar إلى كائن Date().

محدث: يمكن العثور على معلومات إضافية في جريلز جيرا.

هل كانت مفيدة؟

المحلول 2

أصبحت قراءة قيمة g:datePicker أسهل كثيرًا في Grails 1.2 (انظر ملاحظات الإصدار):

تحليل أفضل للتاريخ

إذا قمت بإرسال تاريخ من علامة ، فإن الحصول على كائن التاريخ أمر بسيط الآن مثل البحث عنه من كائن Params بالاسم (على سبيل المثال.params.foo)

نصائح أخرى

استخدم ال كائن الأمر لغة. مثل.في حالة المثال الخاص بك، سأفترض أن النموذج الخاص بك يستدعي الإجراء handleDate.داخل وحدة التحكم:


def handleDate = { FoobarDateCommand dateCommand ->
    def theNextDay = dateCommand.foobar + 1
}

هنا FoobarDateCommand.لاحظ كيف تقوم بتسمية الحقل بنفس الطريقة الموجودة في طريقة العرض:


class FoobarDateCommand { 
    Date foobar 
}

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

عندما تقول المعلمة أنها "بنية"، فهذا يعني أن هناك عددًا من المعلمات لتمثيل قيمتها.في حالتك هناك:

  • المعلمات ["foobar_year" سنة التخزين
  • المعلمات["foobar_month"] شهر التخزين
  • params["foobar_day"] يوم التخزين

فقط أخرجهم وافعل ما تريد :)

لا تزال بحاجة إلى معرفة التنسيق بالرغم من ذلك

def newObject = new SomeClassName()
newObject.foobar = Date.parse('yyyy-MM-dd', params.foobar)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top