2010-10-20 3 views
1

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

Java:

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.ELigneDeclar ation 'делает не имеет собственности' sLibelle '.

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

+0

Я уже пробовал ваше решение и один элитный джентльмен. Я бы поставил точное имя класса, чтобы быть точным. Мои getter/setters генерируются eclipse, и он отлично работает в другом случае без наследования. – jayjaypg22

+0

, если быть точным, есть 2 синтаксиса: один для унаследованного атрибута, один для прямого атрибута, поэтому решение здесь: $ {ligneDecla.ligneDecla.SLibelle} – jayjaypg22

ответ

1

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

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

+0

, а точнее есть 2 синтаксиса: один для унаследованного атрибута, один для атрибута direct поэтому решение здесь: $ {ligneDecla.ligneDecla.SLibelle} – jayjaypg22

0

Ваша проблема находится в вашем методе геттерного:

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

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

(ваш иметь капитал S на вашем геттер имя декларации). Вы можете использовать решение Bozho или исправить название вашего метода getter.

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