2013-07-19 2 views
1

Фон. Использование пружины для инъекций зависимостей и struts2, работающих на сервере tomcat.Java BeanValidation Весна

При выполнении проверки бобов мне нравится использовать двухслойный подход.

  1. Завершить проверку на стороне клиента (на данный момент с использованием плагина проверки jQuery) до того, как форма даже отправлена ​​на сервер для проверки сформированных/завершенных форм.
  2. Проверка работоспособности bean-сервера на сервере с использованием аннотаций на Beans them-self для прекращения раздувания базы данных в случае, если кто-то обходит проверку на стороне клиента.

Проблема:

Отслеживание двух наборов критериев проверки получает быть немного боли ... сообщение об ошибке легко отслеживать, потому что я могу вставить их в сообщения. файл свойств и выполните поиск сообщений как для моей bean-страницы, так и для JSP-страницы. Реальная проблема - это числа.

Например, скажем, у меня есть контрольный список с заметками переменной String. Минимальный размер составляет 10 макс. Через три месяца я вижу, что 2000 просто не разрезает его, и мне нужно увеличить лимит размера до 4000 как максимум. Теперь у меня есть два места, чтобы пойти и изменить число.

Java Bean Validation с аннотацией:

@Entity 
public class Checklist{ 
    @Size(min = 10, max = 2000, message = "{Checklist.size}") 
    private String notes; 
} 

JQuery форма проверки:

$("#someForm").validate({ 
    rules:{ 
    'checklist.notes':{ 
     minlength:10, 
     maxlength:2000 
    } 
    } 
}); 

Есть ли какой-то способ, что я могу повторно использовать номер таким же образом, что я могу повторно использовать сообщение?

ответ

0

Используйте константу из универсального класса или интерфейса. Вставить его в JSP скрипт jQuery с Struts <s:property/> тег.

Таким образом, когда вы измените постоянное значение, новое значение будет автоматически прочитано всеми классами Java и всеми страницами JSP без необходимости изменения кода или замены чего-либо.

Базовый класс, интерфейс, или любой другой, содержащий константы

public static final int MIN_LENGHT = 20; 
public static final int MAX_LENGHT = 4000; 

действий (который реализует/расширяет класс выше констант)

@Entity 
public class Checklist{ 
    @Size(min = MIN_LENGHT, max = MAX_LENGHT, message = "{Checklist.size}") 
    private String notes; 
} 

JSP

$("#someForm").validate({ 
    rules:{ 
    'checklist.notes':{ 
     minlength:<s:property value="@[email protected]_LENGHT" />, 
     maxlength:<s:property value="@[email protected]_LENGHT" /> 
    } 
    } 
}); 

Запомнить установить struts.ognl.allowStaticMethodAccess на true в struts.xml

+1

Это может быть удивительно, насколько просто ответить, когда вы задумываетесь над вещами ... Спасибо, что ответили на мой вопрос. Я бы не хотел, чтобы я делал что-то немного другое (чтобы соответствовать соглашениям о кодировании с моим отделом), но ваше решение прекрасно работает для меня. – buzzsawddog

+0

Рад, что помогло :) –

Смежные вопросы