الربيع MVC شكل: اختر الوسم، تحديدات متعددة غير ملزمة بشكل صحيح؟

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

سؤال

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

<form:select path="rules">
    <form:options items="${bundle.rules}" itemValue="name" itemLabel="name"/>
</form:select>

وأستخدمه السبات لاستمرار ذلك العلاقة تمثل باعتباره HashSet داخل POJO حزمة.

 private Set<Rule> rules = new HashSet<Rule>(0);

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

DEBUG org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:256) - Data binding errors: 1

وهذا يحدث بغض النظر عن تذوي I إلغاء البنود داخل منطقة الجزاء حدد يرفض النموذج بأكمله إلى تقديم بشكل صحيح. يمكن لأي شخص أن يساعدني؟

وأنا على بينة من كيف يمكنني ربط سمات جمع إلى نموذج في الربيع MVC ، وهو ما يماثل على هذا السؤال، لسوء الحظ أيا من الاقتراحات يبدو مفيدا لمشكلتي.

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

المحلول

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

وعندما يتم تنفيذ الربط بنجاح، سوف ترى هذه الرسالة بدلا من ذلك:

No errors -> processing submit

لحل مشكلتك، وسوف تحتاج إلى تسجيل CustomCollectionEditor مع جهاز تحكم. (راجع هذه صلة ). وسيكون شيئا من هذا القبيل:

protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception
{   
  binder.registerCustomEditor(Set.class, "rules", new CustomCollectionEditor(Set.class)
  {
    protected Object convertElement(Object element)
    {
        String name = "";

        if (element instanceof String)
            name = (String) element;

        return name != null ? new Rule(name) : null;
    }
  });
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top