Использование констант файла свойств в качестве значений аннотации - PullRequest
0 голосов
/ 26 января 2020

Я успешно загружаю сообщения для ограничений проверки из моего файла (ов) свойств (i18n), но когда я пишу проверку на стороне клиента, становится ясно, что один источник как для сообщений, так и для значений ограничений может сделать весь процесс менее громоздким.

Вкратце: есть ли способ загрузить значение, например 20, для аннотации размера из файла свойств?

@Size(max=20)
private String password;

Я пробовал строки типа:

@Size(max="${constraint.value}")
// or
@Size(max=Integer.valueOf("#{constraint.value}"))

Но значение должно быть целым числом и константой.

Edit1: логика проверки на стороне клиента c выполняется заново в виде отдельной библиотеки, просто торчат такие значения, как (5,10) для (min, max). (Используя тимилиф)

<script type="text/javascript" xmlns:th="http://www.thymeleaf.org" th:inline="javascript">
    //...
    // reading message from properties file
    /*<![CDATA[*/
        var errMessage = /*[[#{Size.user.userName}]]*/ 'default';
    /*]]>*/

    // adding a constraint to validationObj linked with one <input> element
    validationObj.addSizeConstraint(ft.keyup,5,10,errMessage);
    //...
</script>

Edit2: Благодаря комментарию @Pavel Horal я сделал так:

На стороне сервера:

public static final int USERNAME_MAX_SIZE=20;

@Size(max=USERNAME_MAX_SIZE)
private String userName;

На на стороне клиента (или на стороне клиента, так как он предварительно обрабатывается на стороне сервера с помощью thymeleaf), я получаю это значение следующим образом:

<script type="text/javascript" xmlns:th="http://www.thymeleaf.org" th:inline="javascript">
    //...
    /*<![CDATA[*/
        var value =/*[[${T(com.project.FormModel).USERNAME_MAX_SIZE}]]*/ 20;
    /*]]>*/
    //...
</script>

Что, на мой взгляд, является лучшим решением, поскольку я сохраняю все значения за пределами javascript кода. Спасибо!

1 Ответ

0 голосов
/ 07 февраля 2020

@Size параметр max аннотации принимает только целое число, поэтому нижеприведенное не будет работать в любом случае.

@Size(max="${constraint.value}")

С другой стороны, ниже также не работает. "#{constraint.value}" не разрешит значение из вашего файла свойств. Также "${constraint.value}" здесь также не будет работать.

@Size(max=Integer.valueOf("#{constraint.value}"))

И для всех аннотаций параметры аннотации должны быть константами по определению. Поэтому я не могу представить себе потенциальное решение вашей проблемы.

...