2013-08-11 2 views
2

Как создать собственный тип данных для атрибута UIComponent?JSF2 пользовательские типы данных атрибутов UIComponent

Пример: Предположим, что один имеет UIInputDateUIInput) и имеет атрибут Date maxDate, как я буду убедиться, что все maxDate вводится всегда будет результатом, как Date?

+0

Вы имеете в виду, что вы хотите проверить значение атрибута, указанное enduser (в частности, разработчик с использованием вашего настраиваемого компонента)? – BalusC

+0

Не совсем! Мой пользовательский компонент принимает 'minDate' и' maxDate'. Я хочу, чтобы, независимо от формата даты в Java, я могу проверить, что введенное значение (пользователем) соответствует параметрам 'minDate' и' maxDate', указанным разработчиком. –

+0

Хм, я понял, что вы спросили, как проверить, если разработчик указал 'java.util.Date', а не, например. 'java.lang.String' как' maxDate'. В любом случае, ответ прост, используйте валидатор (вы можете добавить его в конструктор компонента). Но, тем не менее, я нахожу ваш вопрос, когда все запутывают. – BalusC

ответ

1

Вы можете просто создать специальный валидатор обычным способом. Входной компонент уже доступен как 2-й аргумент, вам просто нужно его использовать.

public class UIInputDateRangeValidator implements Validator { 

    public void validate(FacesContext context, UIComponent component, Object value) { 
     UIInputDate inputDate = (UIInputDate) component; 
     Date minDate = inputDate.getMinDate(); 
     Date maxDate = inputDate.getMaxDate(); 
     Date date = (Date) value; 

     // ... Use Date#after(), Date#before(), etc. 
    } 

} 

Вы можете создать и добавить валидатор в конструктор настраиваемого компонента.

public UIInputDate() { 
    addValidator(new UIInputDateRangeValidator()); 
    // You can use setConverter() with new DateTimeConverter() if you didn't already do that. 
} 
+0

Спасибо BalusC, мой вопрос будет, как разработчик будет вводить 'minDate' и' maxDate' в качестве значения на своей странице xhtml (где эти атрибуты являются 'Date')? –

+0

Как обычно? '' и т. д. Я не понимаю вашу конкретную проблему здесь. Это не отличается от всех других атрибутов. – BalusC

+0

Я думал о чем-то более похожем на '<ваш: inputDate minDate =" new Date() "/>', в этом эффекте. Если это невозможно, я вместо этого сделаю ваш предыдущий комментарий. –

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