наследование Java и JSTL

Я хочу получить доступ к атрибуту, унаследованному одним из моих классов Java, в jsp с использованием jstl 1.2:

Джава :

public class LigneDeclarationBean  {

    private ELigneDeclaration ligneDecla;
    private ETypeFormulaire typeForm;

...

    public ELigneDeclaration getLigneDecla() {
    return ligneDecla;
}

    public class ELigneDeclaration extends ZELigneDeclaration implements Serializable {
...
    }

public class ZELigneDeclaration implements Serializable {
   private String sLibelle;
...
   public String getSLibelle() {
        return sLibelle;
    }
}

JSP:

<%
List<LigneDeclarationBean> listelignes = (List) request.getAttribute("listeLignes");
                // Affichage de la liste des ligneDeclas
   for (int i = 0; i < listelignes.size(); i++) {
      LigneDeclarationBean ligneDecla = listelignes.get(i);
%>
    ${ligneDecla.ligneDecla.sLibelle} 

Сообщение об ошибке:

сообщение: Класс «package.ELigneDeclaration» не имеет свойства «sLibelle».

Однако в скриптлете он работает нормально <%=ligneDecla.getLigneDecla().getSLibelle()%> возвращает правильное значение. Это ограничение jstl? Есть ли другой способ получить доступ к моему атрибуту, используя этот taglib? В этом проекте не используется структура представления, и jstl, кажется, единственная библиотека тегов, которую я мог бы использовать.


person jayjaypg22    schedule 20.10.2010    source источник
comment
Я уже пробовал ваше решение и решение The Elite Gentleman. Я поставлю точное имя класса, чтобы быть точным. Мои геттеры/сеттеры генерируются eclipse, и в других случаях он отлично работает без наследования.   -  person jayjaypg22    schedule 20.10.2010
comment
если быть точным, есть 2 синтаксиса: один для унаследованного атрибута, один для прямого атрибута, поэтому решение здесь: ${ligneDecla.ligneDecla.SLibelle}   -  person jayjaypg22    schedule 22.10.2010


Ответы (2)


Это может быть из-за одной буквы в начале. Попробуйте обратиться к нему как ${A.SLibelle}. (т.е. обе буквы в верхнем регистре).

Это немного особый случай с EL, потому что ваш геттер getSLibelle(), и синтаксический анализатор, похоже, не может понять, является ли поле строчным или прописным.

person Bozho    schedule 20.10.2010
comment
если быть точным, есть 2 синтаксиса: один для унаследованного атрибута, один для прямого атрибута, поэтому решение здесь: ${ligneDecla.ligneDecla.SLibelle} - person jayjaypg22; 22.10.2010

Ваша проблема обнаружена в вашем методе получения:

Правильный способ создания метода получения для sLibelle:

/**
 * @return the sLibelle
 */
public String getsLibelle() {
    return sLibelle;
}

(у вас есть заглавная буква S в имени объявления метода получения). Вы можете использовать решение Божо или исправить название вашего метода получения.

person Buhake Sindi    schedule 20.10.2010