2011-02-14 1 views
1

기본적으로 나는 나를 위해 자바 객체를 쿼리하는 커스텀 태그를 가지고있다. 내가 언제 끝날 불구하고 점점 것을JSTL 태그에서 반환 된 값을 EL 문으로 다시 가져 오는 방법은 무엇입니까?

<c:when test="${profit > 0}"> 

:

<c:set var="profit"> 
    <ct:get-profit transaction="${transaction}"/> 
</c:set> 

이제 문제는 내가 아니라 그렇게하는 if 문에서 부동 인 (그 값을 사용할 것입니다 다음과 같은 오류. 내가이 일을 할 수있는 방법 아무 생각이

javax.el.ELException: Cannot convert -141.75 of type class java.lang.String to class  java.lang.Long 

는. 나는 JSTL의 당신을 위해 주조 처리 것이라는 인상이었다 잘못? 어느 쪽이든, 어떻게이 일을 만드는 방법에 대한 갈 것입니다 고마워요

+0

왜 내가이 다음과 같은 오류가 발생하는지 알고 싶습니다. –

+0

나는 그것이 소수점 때문에라고 생각한다. 왜 Long을 캐스팅하려고하는지 확신 할 수 없습니다. – CoolBeans

+0

여기 JSTL 자동 캐스팅을 잘 읽으십시오. http://today.java.net/pub/a/today/2003/10/07/jstl1.html – CoolBeans

답변

1

0 대신 0.00을 사용할 수 있습니까? <c:when test="${profit > 0.00}">.

이유는 EL 파서가 0을 Long으로 처리하기 때문입니다. 그러나 "0.00"은 부동 소수점으로 처리됩니다. 당신이 <c:set>의 암시 Object#toString()에 의해 String로 변환하는 몸에 설정

1

다. 형식을 변경하지 않고 대신 value 특성을 사용하고 싶습니다.

<ct:get-profit> 태그를 EL 기능으로 대체하는 것이 좋습니다. 이 태그는 마크 업을 렌더링하지 않는 것 같으므로 EL 기능을 사용하면 마크 업을 훌륭하게 (그리고 더 좋게) 수행 할 수 있습니다. 이러한 기능 구성 this answer의 바닥을 확인하는 방법에 대한보다 상세한 예

public static float getProfit(Transaction transaction) { 
    // Implement. 
} 

와 조합

<c:set var="profit" value="${ct:getProfit(transaction)}" /> 

.