#java #jsp #attributes #custom-tags
#java #jsp #атрибуты #пользовательские теги
Вопрос:
Я хочу создать пользовательскую библиотеку тегов, но в классе обработчика я хотел бы иметь целочисленные атрибуты.
В файле tld у меня есть следующий код:
<tag>
<name>circle</name>
<tag-class>draw.Circle</tag-class>
<body-content>jsp</body-content>
<attribute>
<name>x</name>
<required>true</required>
</attribute>
</tag>
существуют и другие целочисленные атрибуты, но этот пример относится к другим.
Класс обработчика на данный момент выглядит следующим образом:
public class Circle extends TagSupport{
private Integer x;
public Integer getX() {
return x;
}
public void setX(String x) {
this.x = Integer.parseInt(x);
System.out.println("Set x");
}
}
Я не указал тип атрибута в файле tld, и по умолчанию он должен быть String. Хотя я получаю ошибку, подобную этой:
Unable to find setter method for attribute: x
Я также попытался изменить тип атрибута на: <type>java.lang.Integer</type>
и метод установки на:
public void setX(int x) {
}
И я получаю ту же ошибку.
Как я должен определить атрибут в файле tld и параметр в классе обработчика, чтобы я не получал ошибку параметра?
Комментарии:
1. Что произойдет, если вы измените возвращаемый тип getter на String?
2. Все ли типы совпадают (возврат getter, параметр setter, тип в TLD)?
Ответ №1:
Пользовательские теги JSP используют технологию JavaBeans, которая имеет стандартные соглашения (вот небольшое руководство по JavaBeans, в котором отражены основные аспекты).
«Свойство компонента» (см. PropertyDescriptor
) состоит из средства получения и / или метода установки того же типа (возвращаемый тип средства получения должен соответствовать одному типу параметра средства установки), в противном случае они не сопоставляются с одним и тем же свойством компонента (я предполагаю, что первый метод в классе «выигрывает»). Таким образом, ваш подход к получению целых чисел / настройке строк не может работать, поскольку установщик строк не будет обнаружен как принадлежащий целочисленному свойству).
Установите тип параметра метода setter на Integer
, и он будет работать, преобразование будет применено автоматически, JavaBeans имеет встроенную поддержку преобразования значений через PropertyEditor
интерфейс (существуют реализации по крайней мере для всех примитивных типов значений, и благодаря автоматической распаковке Integer
их можно считать примитивными).
Комментарии:
1. Я попробую это. И должно ли это также работать для типа цвета java.awt.Color?
2. @AlinaDanila Я не знаю, существует ли редактор свойств для цвета, но вы можете проверить. В противном случае используйте строковые или целочисленные методы получения и установки и выполняйте преобразования внутри них.
3. Я нашел
ColorEditor
, но, к сожалению, это тесно интегрировано с Swing