Тип атрибута пользовательского тега JSP целое число

#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