나는 내 고쳐 쓰고있다. jsp에서 JSTL/EL까지 scriplets에서 나는 문제에 직면하고있다. 아마 아주 간단하지만 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>
하지만 의 setAttribute에와 대해 forEach에 모두 사용하고 있기 때문에 나는 "personList"를 복제하고 있습니다. 이 중복을 제거하려면 어떻게해야합니까?
이상적으로 나는 서블릿과 .jsp로 (EL을 사용하지 스크립틀릿) 모두에서 참조 할 수 있다고하는 공공 정적 최종 문자열처럼 상수를 가지고 싶습니다.
분명 내가이 중복을 제거하려는 이유는 내가 (에 '의'와 함께) 사람, 말에 personList의 이름을 변경하기로 결정한 경우, 나는 현재 두 가지를 변경해야하고이 오류 -입니다 경향이있다. 내가 상수를 가졌다면 그 변화를 만들어야 할 곳이 하나 밖에 없을 것입니다.
EDIT 누군가 상수를 사용하면 상수의 이름을 변경하면 변경해야 할 곳이 2 곳 이상 필요하다는 의견이 있습니다. 그러나 내가 이것을 할 수 있다면 큰 차이가있다 :
request.setAttribute (Constants.PERSON_LIST, l);
* PERSON_LIST *의 이름을 바꾸고 컴파일 타임에 중단되는 오타를 만들었습니다.
내가 잘못 입력하면 동안 :
request.setAttribute("persnList", l); // forgetting an 'o' here
이 lamely 컴파일하고 "personList"가 아니라 잘못 입력 "persnList"를 사용하는 .jsp로 경우 런타임에 실패합니다.
"답변"에 동의하지 않습니다. 그것은 확실히 중복이고 나는 왜 나의 질문의 끝에 설명한다. 스크립틀릿을 사용하면 두 곳에서 무언가를 바꿔야합니다.이 복제본을 사용하지 않는 것은 아주 사소한 일입니다. 그것은 변수와 같지 않습니다. –
* "프로그램을 작성하고 나중에 한 줄에 변수를 선언하면 ..."* ... 한 줄에있는 "문자열"이있는 메서드의 한 줄에있는 변수를 비교하는 비웃음 , 서블릿에서 그리고 다른 한편으로는 * .jsp *에서 그렇지 않다!? 다시 한번, 스크립틀릿을 사용하면 이런 종류의 중복이 발생하지 않습니다. –
상수를 선언하는 경우 어떻게 다른가? 상수권의 이름을 바꾸려면 여전히 사용법을 고쳐야합니다. – Kevin