Как снова использовать fieldlength в форме, проверке и ddl?

Я работаю над приложением Spring с большим количеством входных форм. Я хотел бы снова использовать длину поля в форме UI, проверке и аннотациях JPA. Есть ли изящный способ решить это. Мое решение в данный момент, для использования констант для объявления длины:

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

   @Column(length=FIRSTNAME_LENGTH)
   private String firstName;

   ...
}

и затем снова используйте константу в Блоке проверки допустимости и Jsp

...

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

...

который является довольно подробным.

Есть ли еще изящное решение этой проблемы?

6
задан James McMahon 18 December 2009 в 16:09
поделиться

2 ответа

Вполне возможно получить доступ к информации, хранящейся в аннотациях. Фактически, это их основная цель: хранение метаинформации о классе / методе / поле. Вот пример того, как получить доступ к длине, хранящейся в аннотации @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());
   }
}

Вы должны иметь возможность создать некоторый собственный тег или bean-компонент для общего извлечения этой информации.

Нетрудно создать свои собственные аннотации. Вы можете подумать о создании поля, которое определяет, какие поля должны быть включены в форму, как они должны отображаться, описание и т. Д. Тогда вы могли бы создать общую форму. С другой стороны, вам может не понравиться смешивать домен и презентацию.

11
ответ дан 9 December 2019 в 20:45
поделиться

Я задавал аналогичный вопрос, когда использовал Hibernate,

Получение длины столбца из сопоставлений Hibernate?

Не знаю, как получить эту информацию из JPA однако, но если вы используете Hibernate в качестве базового уровня, вы можете попробовать получить доступ к Hibernate напрямую и реализовать вышеприведенное решение.

Однако решение Hibernate так же элегантно, как и решение, которое вы изложили в своем ответе, с добавленным Недостатком является то, что он связывает вашу реализацию JPA с Hibernate.

1
ответ дан 9 December 2019 в 20:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: