2007年12月21日金曜日

EL式で文字列連結

をやろうと思って、

${bean.value? ("abc" + bean.strA): ("def" + bean.strB)}


みたいに書いたけど、期待通りに動作しなくって、悩んだ。
javax.servlet.jsp.el.ELException: String "def" を "java.lang.Double" 型に変換しようとした際に例外が発生しました
at org.apache.commons.el.Logger.logError(Logger.java:481)
at org.apache.commons.el.Logger.logError(Logger.java:498)
at org.apache.commons.el.Logger.logError(Logger.java:566)
at org.apache.commons.el.Coercions.coerceToPrimitiveNumber(Coercions.java:440)
at org.apache.commons.el.Coercions.applyArithmeticOperator(Coercions.java:852)
at org.apache.commons.el.ArithmeticOperator.apply(ArithmeticOperator.java:83)
at org.apache.commons.el.BinaryOperatorExpression.evaluate(BinaryOperatorExpression.java:170)
at org.apache.commons.el.ConditionalExpression.evaluate(ConditionalExpression.java:155)

とか
javax.servlet.jsp.el.ELException: String "abc" を "java.lang.Long" 型に変換しようとした際に例外が発生しました
at org.apache.commons.el.Logger.logError(Logger.java:481)
at org.apache.commons.el.Logger.logError(Logger.java:498)
at org.apache.commons.el.Logger.logError(Logger.java:566)
at org.apache.commons.el.Coercions.coerceToPrimitiveNumber(Coercions.java:440)
at org.apache.commons.el.Coercions.applyArithmeticOperator(Coercions.java:872)
at org.apache.commons.el.ArithmeticOperator.apply(ArithmeticOperator.java:83)
at org.apache.commons.el.BinaryOperatorExpression.evaluate(BinaryOperatorExpression.java:170)
at org.apache.commons.el.ConditionalExpression.evaluate(ConditionalExpression.java:153)

とか、なってしまう。

ソース見ると、算術演算子の対象となるオブジェクトは、強引に Long や Double にキャストされてる。

<c:if test="${bean.value}">
abc${bean.strA}
</c:if>
<c:if test="${!bean.value}">
def${bean.strB}
</c:if>


と、やるべきみたい。。

0 件のコメント: