Язык выражений JSTL, обращающийся к свойствам объекта - PullRequest
7 голосов
/ 22 сентября 2010

Сегодня я читал урок, в котором я целый час чесал голову.Рассмотрим:

public class MyClass {
    public int getTotal() {
        amount = 100;
        return amount;
    }
}

и выдержку из JSP:

<p>Total: ${objectOfTypeMyClass.total}</p> //object instantiated elsewhere

Нигде в коде не было ни одной переменной экземпляра с именем " total ", когда-либо объявленной или использованной.Единственной ссылкой на слово «общее» во всем проекте (кроме JSP) был метод getTotal () .

Так что после некоторого отчаянного эксперимента с последним рвом, кажется,этот язык выражений оценивает $ {someObject.var} как "вызов getVar () метода someObject объекта.

, с которым я работалэто длинное учебное пособие в течение более недели, в котором мы думали, что $ {someObject.var} говорит "напрямую получить сохраненную переменную экземпляра" var"из someObject .

Неужели я все время ошибался и верно ли мое наблюдение, что для ссылки на любую переменную экземпляра с использованием EL необходимо предоставить соответствующий метод получения с именем getVarname () где " Varname"- это имя переменной экземпляра?

Кроме того, EL, похоже, не учитывает регистр в этом отношении.В моем примере выше, «total» в $ {objectOfTypeMyClass.total} - все строчные, где метод getTotal () имеет заглавную букву «T».

Ив то время как мы находимся, почему нам не нужно создавать экземпляр переменной "total"?Я предполагаю, что EL на самом деле не ссылается на переменную экземпляра ... просто метод получения?

Что дает?

Ответы [ 3 ]

8 голосов
/ 22 сентября 2010

Неужели я все время ошибался и верно ли мое наблюдение, что для того, чтобы ссылаться на любую переменную экземпляра, используя EL, вы должны предоставить соответствующий метод получения с именем getVarname (), где "Varname" - это имяпеременная экземпляра?

Это правильно.EL придерживается спецификации JavaBeans , как описано в спецификации EL .

Кроме того, EL, похоже, не учитывает регистр в этом отношении.В моем примере выше «total» в $ {objectOfTypeMyClass.total} - это все строчные буквы, где метод getTotal () имеет заглавную букву «T».

Нет, это, конечно, не чувствительно к регистру.Это определенное поведение.${bean.Total} не сработало бы.

И пока мы занимаемся этим, почему нам не нужно создавать экземпляр переменной "total"?Я предполагаю, что EL на самом деле не ссылается на переменную экземпляра ... просто метод получения?

Это потому, что он должен соответствовать спецификации Javabean.

Все со всеми, прочитайтеи спецификации, и все будет ясно:)

См. также:

2 голосов
/ 22 сентября 2010

. в objectOfTypeMyClass.total является оператором точки JSTL EL.Это может сделать несколько разных вещей.Включая:

  1. map.key доступ к значению map, хранящемуся в key.или
  2. object.property осуществляет доступ property из object с использованием соглашений "JavaBeans".
0 голосов
/ 22 сентября 2010

Это должно работать:

public class MyClass {

    private int total = 100;

    public int getTotal() {
        return total;
    }

    ...
}
...