2009-09-01 11 views
3

:JSTL의 foreach 문 및 인텔리

<c:forEach items="${customers}" var="customer"> 
    ${customer.name} 
</c:forEach> 

인 IntelliJ 아이디어는 foreach 루프에서 "고객"변수의 타입이 클래스 "고객"의 것을 추론 할 수는 (고객 주어진 List < 고객>과 같은 것입니다. Java 고객 클래스를 리팩토링하고 getName을 getFullName으로 변경하면 jstl이 $ {customer.fullName}을 읽도록 변경됩니다.

나는 standard.jar의 소스를 다운로드했는데, 이것이 실제로 어떻게 수행되는지는 알 수 없다. tei-class로 타입 정보를 출력 할 수 있어야한다는 것을 알고 있지만, 자카르타 Taglibs의 TEI 클래스는 이것을하지 않습니다. 아무도 내가 누락 된 것을 알아?

(나는 내 ​​자신의 foreach 문을 만들려고 노력하고 있어요,하지만 동일한 수준의 지원을받을 수 없다면 그렇게되지 않습니다,하지만 난 단지 그것을 수행하는 방법을 볼 수 없습니다 ..)

+0

아마도 매우 낮은 기술을 사용하고있을 것입니다. 어쩌면 변수 이름에서 추측 할 수도 있습니다. 나는 정말로 변수 이름을 바꾸어보고 잃어버린지를 볼 것입니다 ... – alex

+0

분명히 그보다 더 똑똑 합니다만, 이것을 달성하기 위해 어떤 어두운 예술 조합이 사용되고 있는지 당황 스럽습니다. – krosenvold

+0

안녕하세요 고객 클래스의 이름을 Cust에 리팩터링하고 jstl에 어떤 영향을 미치는지 알려주세요. –

답변

2

나는 믿습니다 intellij는 JSF/Facelets/JSP의 공통 라이브러리를 알고 있기 때문에 특별히 추론합니다. 나는 이것을 IDE에 알리기 위해 taglib에 노출 된 것이 없다고 생각합니다.

내가 자신의 태그 확장 기능을 지원할 수 있도록 후크를 제공하는지는 확실하지 않지만 의심 스럽습니다.

2

Idea에는 태그와 TLD를 기반으로 모든 태그 라이브러리에 대해 동적으로이를 수행 할 수있는 것이 아니라 JSTL을 지원하도록 특별히 작성된 코드가 있다고 생각합니다.

예제에서 "고객"은 어떻게 초기화됩니까? Idea가 List<Customer> getCustomers()과 같은 메소드가 호출되는 것을 볼 수 있다면 Method을 반영하고 List의 type 매개 변수가 Customer임을 알 수 있습니다. 그렇지 않으면, 어떻게 알아낼 수 있을지 모르겠다.

아마 자신의 태그 라이브러리에 대한 지원을 제공하기 위해 Idea에 갈고리가 있습니다.