Я переписываю свой .jsp со скриптов на JSTL/EL и столкнулся с проблемой. Это, наверное, очень просто, но я новичок в EL и немного потерялся.
Вот что я делаю...
В сервлете/контроллере:
final List<Person> l = new ArrayList<Person>();
personList.add(...);
.
.
request.setAttribute( "personList", l );
И в моем .jsp:
<c:forEach var="person" items="${personList}">
${person.name}
</c:forEach>
Но я дублирую "personList", потому что использую его как в setAttribute, так и в forEach. Как избавиться от этого дублирования?
В идеале я хотел бы иметь константу, такую как public static final String, на которую я мог бы ссылаться как из сервлета, так и из .jsp (используя EL, а не скриптлеты) .
Очевидно, причина, по которой я хочу устранить это дублирование, заключается в том, что если я решу переименовать personList, скажем, в persons (с буквой s), мне в настоящее время нужно изменить два вещи, и это подвержено ошибкам. Если бы у меня была константа, было бы только одно место, где мне нужно было бы внести это изменение.
EDIT кто-то заметил, что при использовании константы все равно нужно было бы изменить два места, если бы я изменил имя константы. Однако есть большая разница, если бы я мог это сделать:
request.setAttribute(Constants.PERSON_LIST, l );
затем решили переименовать *PERSON_LIST* и сделали опечатку, которая сломается во время компиляции.
Хотя, если я ошибаюсь:
request.setAttribute( "persnList", l ); // forgetting an 'o' here
Это неубедительно скомпилируется и завершится ошибкой во время выполнения, если .jsp использует "personList", а не "persnList" с ошибкой.