2007年12月27日木曜日

HTML中に全角スペース

が紛れ込んで、レイアウトが崩れていた。
けど、全角スペースが紛れ込んでいることに気づかず、しばらく悩んだ。
ここを参考にして、全角スペースを見えるようにした。

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>


と、やるべきみたい。。

2007年12月17日月曜日

applyが少し理解できたかもしれない

function Foo() {
this.fooValue = 1;
this.fooFunc = function () { alert(this.fooValue); }
}

function Bar() {
Foo.apply(this);
// this.superFooFunc = this.fooFunc; // これでもいいけど、外からアクセスできてしまう。(A)
var superFooFunc = this.fooFunc; // これだと、この関数内からのみアクセス可能。(B)

this.fooFunc = function () {
alert("fooFunc");
// this.superFooFunc(); // (A)のケースだとこちらの呼び出しでOK
superFooFunc.apply(this); // (B)のケースだと、こっちになる
}
}

var a = new Bar();
a.fooFunc();