Целочисленный тип атрибута пользовательского тега JSP - PullRequest
1 голос
/ 23 октября 2011

Я хочу создать собственную библиотеку тегов, но в классе обработчика мне бы хотелось иметь целочисленные атрибуты.

В файле 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 Ответ

4 голосов
/ 23 октября 2011

Пользовательские теги JSP используют технологию JavaBeans , которая имеет стандартные соглашения (здесь небольшое руководство по JavaBeans , которое охватывает основные аспекты).

Свойство bean-компонента"(см. PropertyDescriptor) состоит из метода получения и / или метода установки того же типа (тип возвращаемого значения метода получения должен соответствовать одному типу параметрасеттера), иначе они не отображаются в одно и то же свойство компонента (я предполагаю, что первый метод в классе "выигрывает").Таким образом, подход Integer getter / String setter не может работать, так как String setter не будет определяться как принадлежащий свойству Integer).

Установите тип параметра метода setter равным Integer, и он будетво-первых, преобразование будет применено автоматически, JavaBeans имеет встроенную поддержку преобразования значений через интерфейс PropertyEditor (существуют реализации, по крайней мере, для всех типов примитивных значений, и через автоматическую распаковку Integerможно считать примитивным).

...