كيفية إعادة استخدام fieldlength في شكل والتحقق منها وDDL؟

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

سؤال

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

public class Person
{
   public static final int FIRSTNAME_LENGTH = 25;

   @Column(length=FIRSTNAME_LENGTH)
   private String firstName;

   ...
}

وثم إعادة ثابت في المصادقة والتخطيط الاستراتيجي المشترك

...

<form:input path="firstName" 
    maxlength="<%= Integer.toString(Person.FIRSTNAME_LENGTH) %>"/>

...

والذي هو مطول جدا.

هل هناك أي حل أكثر أناقة لهذه المشكلة؟

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

المحلول

وهناك احتمال كبير للوصول إلى المعلومات المخزنة في الشروح. في الواقع، وهذا هو الغرض الرئيسي منها: تخزين المعلومات الوصفية على فئة / أسلوب / المجال. وفيما يلي مثال لكيفية الوصول إلى طول تخزينها في الشرحcolumn:

import javax.persistence.Column;
import javax.persistence.Entity;

@Entity
public class Person {

   @Column(length=30)
   private String firstName;

   public static void main(String[] args) throws SecurityException, NoSuchFieldException {
      Object person = new Person();
      //find out length    
      System.out.println(person.getClass().getDeclaredField("firstName").getAnnotation(Column.class).length());
   }
}

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

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

نصائح أخرى

وسألت سؤالا مماثلا عندما كنت تستخدم السبات،

<اقتباس فقرة>   

الحصول على طول العمود من تعيينات السبات؟

ولا فكرة عن كيفية سحب هذه المعلومات تحت JPA ومع ذلك، ولكن إذا كنت تستخدم السبات كما طبقة الأساسية الخاصة بك قد تتمكن من محاولة الوصول السبات مباشرة وتنفيذ الحل أعلاه.

ولكن الحل السبات تماما كما هو في أنيقة هو الحل أنك المبينة في الإجابة، مع أن العيب أضاف أنه يربط تنفيذ النقابة لالسبات.

والحل التي تقدمها المنظمة بتبني يقرأ قيمة المشروح للطول العمود. وأشار جيمس مكماهون إلى أن هذا يعرض تنفيذ السبات. لا يمكن حلها ببساطة إلى حد ما مع الأساليب جالبة. على افتراض وجود واجهة لشخص لديه طريقة getFirstNameLength أعلن:

import javax.persistence.Column;
import javax.persistence.Entity;

@Entity
public class PersonImplementation extends Person {

   @Column(length=30)
   private String firstName;

   public int getFirstNameLength() {
       return this.getClass().getDeclaredField("firstName").getAnnotation(Column.class).length();
   }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top