Без проверок в бизнес приложениях пожалуй точно не обойтись и в ADF для их реализации достаточно возможностей. Покажу лишь некоторые из них.
Примеры делаются на схеме HR базы XE.
Самые доступные проверки - декларативные, доступны на сущности (EO)
Они понятны из названий.
Рассмотрю вид проверки Method. Это java метод в котором можно выполнить различные проверки и вернуть результат.
Реализация метода находится в одноименном Impl классе сущности. Для этого примера покажу более гибкий способ формирования сообщения об ошибке.
В сообщение используется шаблон, который в свою очередь заполняется из метода getErrMessage(), Impl класса. Обратите внимание на prefix "source", так можно получить доступ из Groovy выражения к java объекту.
Вот так выглядит реализация этих методов в Impl классе.
А вот так обработка на форме
Вообще для регулярных выражений может хватить и декларативного подхода, да и для многих других простых случаев.
Но в примере показана возможность для реализации сложной логики. Этот способ проверок происходит в с слое Model, а в другом примере покажу как можно проводить контроль в слое ViewController.
Для поля Salary создается метод validateSalary для Validator. Реализация метода делается в бине.
В коде
Обработка на форме
Проверки в модели могут быть полезны когда они не зависят он состояния слоя View, повторно используются между разными клиентами, ViewController - ми. Проверки в слое View полезны когда надо использовать состояние и другие зависимости в UI. Некоторые декларативные проверки будут транслированы в javascript и отрабатывать на клиенте.
Источники:
Using Validation in the ADF Model Layer
http://docs.oracle.com/cd/E16162_01/web.1112/e16182/validation_model.htm
Custom Validator in Oracle ADF (JSF Validator)
http://oracleadf-java.blogspot.ru/2012/11/custom-validator-in-oracle-adf-jsf_20.html
Исходный код
Примеры делаются на схеме HR базы XE.
Самые доступные проверки - декларативные, доступны на сущности (EO)
Они понятны из названий.
Рассмотрю вид проверки Method. Это java метод в котором можно выполнить различные проверки и вернуть результат.
Реализация метода находится в одноименном Impl классе сущности. Для этого примера покажу более гибкий способ формирования сообщения об ошибке.
В сообщение используется шаблон, который в свою очередь заполняется из метода getErrMessage(), Impl класса. Обратите внимание на prefix "source", так можно получить доступ из Groovy выражения к java объекту.
Вот так выглядит реализация этих методов в Impl классе.
public class EmployeesImpl extends EntityImpl { private String errMessage; private static String emailTempl = "^([a-z0-9_\\-]+\\.)*[a-z0-9_\\-]+@([a-z0-9][a-z0-9\\-]*[a-z0-9]\\.)+[a-z]{2,4}$"; private static Pattern emailPtr = Pattern.compile(emailTempl); /** * Validation method for Email. */ public boolean validateEmail(String email) { Matcher m = emailPtr.matcher(email); boolean mt = m.matches(); if (!mt) { errMessage = "Не верный email адрес"; } return mt; } public String getErrMessage() { return errMessage; }
А вот так обработка на форме
Вообще для регулярных выражений может хватить и декларативного подхода, да и для многих других простых случаев.
Но в примере показана возможность для реализации сложной логики. Этот способ проверок происходит в с слое Model, а в другом примере покажу как можно проводить контроль в слое ViewController.
Для поля Salary создается метод validateSalary для Validator. Реализация метода делается в бине.
В коде
public void validateSalary(FacesContext facesContext, UIComponent uIComponent, Object object) { String clientId = uIComponent.getClientId(facesContext); boolean fatal = false; if ((object == null) || (object.toString().isEmpty())) { fatal = true; } else if (!isDigit(object.toString())) { fatal = true; } else if (Integer.parseInt(object.toString()) <= 0) { fatal = true; } if (fatal) { facesContext.addMessage(clientId, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Ошибка", "Заработная плата должна быть > 0")); } }
Обработка на форме
Проверки в модели могут быть полезны когда они не зависят он состояния слоя View, повторно используются между разными клиентами, ViewController - ми. Проверки в слое View полезны когда надо использовать состояние и другие зависимости в UI. Некоторые декларативные проверки будут транслированы в javascript и отрабатывать на клиенте.
Источники:
Using Validation in the ADF Model Layer
http://docs.oracle.com/cd/E16162_01/web.1112/e16182/validation_model.htm
Custom Validator in Oracle ADF (JSF Validator)
http://oracleadf-java.blogspot.ru/2012/11/custom-validator-in-oracle-adf-jsf_20.html
Исходный код
Комментариев нет:
Отправить комментарий