Bean проверка валидации VS JSF

При рассмотрении проблемы проверки свойства в приложении JSF2 существуют два основных подхода.

Определение проверки на ManagedBean с помощью аннотации

@ManagedBean
public class MyBean {
    @Size(max=8)
    private String s;

    // Getters setters and other stuff.
}

или объявив его на странице jsf:

<h:inputText value="#{myBean.s}">
    <f:validateLength maximum="8"/>
</h:inputText>

Бывает, что я не могу решить ни одного из них. Первый из них хорош, потому что он удаляет некоторый код из jsf-страниц (что всегда хорошо, поскольку эти страницы не являются дружественными по определению по определению), но делает сложнее увидеть "с первого взгляда", что происходит со страницей при проверке файла jsf.

Какой, по вашему мнению, яснее? Nicer? Лучше?

Ответы

Ответ 1

Я бы прокачал для проверки на ManagedBean, это удалит логику из JSF VIEW в диспетчере представлений модели. и должен держать JSF ответственным за отображение Модели. Кроме того, наличие этого на управляемом bean гарантирует, что когда-либо это обновление обновляется. Это больше СУХОЙ (не повторяйся).

Ответ 2

Есть еще одно преимущество подхода managedBean. Если информация, отображаемая JSF, также доступна через веб-службу (WS), тогда фактический код проверки может быть вычислен в класс проверки и использоваться как для JSF, так и для WS, гарантируя, что вся информация в системе действительна.

Ответ 3

Richfaces позволяет вам использовать их вместе. См. <rich:graphValidator>beanValidator).

Эти теги говорят: "применить проверку JSF на основе правил javax.validation (или Hibernate validator)".

Ответ 4

@user1730904, вы можете определить сообщения в файле пакета ресурсов, как описано в Bean документе спецификации проверки. Необходимые шаги просты:

  • Создайте файл с именем ValidationMessages_xx_XX.properties в некоторой папке pathpath (например, src/main/resources/). Где xx_XX - es_ES, en_US и т.д. Где может быть содержимое: field.message=The number of digits must be less or equal than {max}.
  • Затем используйте значение в аннотации атрибута Bean: @Size(max = 20, message="{field.message}")

Ответ 5

Я бы предпочел проверку JSF, потому что я не могу предоставить сообщения об ошибках пакета ресурсов как часть валидации bean. Например, вы не можете этого сделать

@NotNull(message = ResourceBundleHelper.getString("error_message"))

Потому что "константы компиляции могут быть только примитивами и строками". Для определения постоянных сообщений есть работа, но это будет выглядеть некрасиво.