Tomcat 6, 7 의 EL 표현식 해석 시 존재하는 버그 분석
이 버그는 JSTL
<c:forEach var="looper" items="${pageHelper.pageList}">
<c:choose>
<c:when test="${looper eq pageHelper.pageDot}">
<p> </p>
</c:when>
<c:when test="${looper eq pageHelper.pageNo}">
<p> ${looper} </p>
</c:when>
<c:otherwise>
<p> :${looper}</p>
</c:otherwise>
</c:choose>
</c:forEach>
여기 페이지헬퍼는 바로 페이지 구성 요소입니다. 그 중에서 페이지Dot은 "..."로 미리 설정되어 있습니다.페이지 No 는 현재 페이지 번호 (6 으로 가정), 페이지 구분 커서를 직접 표시합니다.순환 반복에서 가장 기본적인 조건 판단 문장을 사용했을 뿐이다. 페이지 리스트는 정의에서 리스트
javax.el.ELException: Cannot convert ... of type class java.lang.String to class java.lang.Long
왜'유형 변환 오류'가 발생했을까?코드의 방향을 분석함으로써 순환에 들어간 후 list의 첫 번째 데이터는 "1"이고 pageHelper입니다.pageNo는 long형입니다. 이 때tomcat의 EL 표현식 해석기는 looper 형식을 Long형으로 변환합니다. pageHelper가 아니라.페이지 No 유형을 String으로 변환하여 비교합니다. 다음 요소로 이동할 때 looper = "..."이 때 looper의 형식이 확정되었습니다. 비교할 때tomcat에서 looper를 Long 형식으로 바꾸려고 시도했기 때문에 오류가 발생했습니다.이를 위해 나는 전문적으로 실례 코드를 하나 썼다
<c:forEach var="looper" items="${pageHelper.pageList}">
<c:choose>
<c:when test="${looper eq fn:trim(pageHelper.pageDot)}">
<p> </p>
</c:when>
<c:when test="${looper eq fn:trim(pageHelper.pageNo)}">
<p> ${looper} </p>
</c:when>
<c:otherwise>
<p> :${looper}</p>
</c:otherwise>
</c:choose>
</c:forEach>
간단하다. 비교할 때마다 후자를 fn:trim 방법으로 좌우 비가시 문자를 제거한다.String 형식으로 강제로 변환하는 것과 같습니다. 이 때tomcat은 코드를 정상적으로 해석할 수 있으며 오류가 발생하지 않습니다.같은 코드를 Resin에 배치하면 수정 전이든 수정 후든 정상적으로 실행될 수 있음을 알 수 있습니다. 이것은tomcat의 버그일 것입니다.
예제 코드:다운로드 클릭
tomcat에 오류를 보고하도록 하는 프레젠테이션 주소:/bug/show.do
이 버그를 피하는 방법 설명 주소:/bug/avoid.do
상기 주소 전에 프로젝트 이름을 추가해야 할 수도 있습니다. (구체적으로 이 프로젝트를 어떻게 배치하느냐에 달려 있습니다.)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JSP EL이란JSP 스크립트의 표현식을 대신하여 속성 값을 쉽게 출력하도록 고안된 언어 출력, 반복처리를 태그 기반으로 제공 기존 Expression Tag(<%=%>)를 대체 Expression Tag(<%=%>)대신 으로 간...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.