Сегодня я следовал учебнику, который заставил меня почесать голову в течение часа. Рассмотреть возможность:
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< /strong>» — это имя переменной экземпляра?
Кроме того, EL, кажется, нечувствителен к регистру в этом отношении. В моем примере выше, "total" в ${objectOfTypeMyClass.total} все в нижнем регистре, где метод getTotal() имеет заглавную "T".
И пока мы это делаем, почему бы нам не создать экземпляр переменной total? Я предполагаю, что EL на самом деле не ссылается на переменную экземпляра... просто на метод получения?
Что дает?