[英]Expression Language in JSP : Arithmetic Operator Division
我需要澄清有關在JSP中遵循EL片段的信息
$ {5/x} : ${5/x}
$ {10/0} : ${10/0}
$ {5/2} : ${5/2}
$ {x/10} : ${x/10}
$ {5 div null} : ${5 div null}
$ {x/x} : ${x/x}
$ {0/0} : ${0/0}
$ {x/null} : ${x/null}
$ {null div x} : ${null div x}
$ {null/null} : ${null/null}
上面的jsp的輸出將是
$ {5/x} : Infinity
$ {10/0} : Infinity
$ {5/2} : 2.5
$ {x/10} : 0.0
$ {5 div null} : Infinity
$ {x/x} : 0
$ {0/0} : NaN
$ {x/null} : 0
$ {null div x} : 0
$ {null/null} : 0
我已經讀到EL在處理空值或任何不在任何范圍內的對象方面足夠聰明。 而且,EL中的除法運算符遵循浮點算法。
對於在任何范圍內找不到的任何變量或null關鍵字,EL會在其中放置一個值0。 如果是這樣,為什么$ {x / x},$ {x / null},$ {null div x}和$ {null / null}得出0? 我的猜測是,它應該是NaN,例如$ {0/0}。 (因為null或不可用的變量為'0')
注意:在以上代碼段中,x是在任何范圍內都不可用的變量。
請幫助我了解這種行為。
謝謝!
您好JavaHopper,以及其他所有人。
我想,我找到了解決方案。
我的設置:
和
從此頁面訪問: http : //www.java2s.com/Code/Jar/t/Downloadtomcatjasper800rc1sourcesjar.htm
用於調試。
如您所說,如果兩個操作數均為“ null ”,則結果為0 。
如果我讓它調試,它將到達要點,即調用名為:
public static final Number divide(final Object obj0, final Object obj1)
可以在這里找到:
org.apache.el.lang.ELArithmetic.divide(obj0, obj1)
這是完整的方法:
public static final Number divide(final Object obj0, final Object obj1) {
if (obj0 == null && obj1 == null) {
return ZERO;
}
final ELArithmetic delegate;
if (BIGDECIMAL.matches(obj0, obj1))
delegate = BIGDECIMAL;
else if (BIGINTEGER.matches(obj0, obj1))
delegate = BIGDECIMAL;
else
delegate = DOUBLE;
Number num0 = delegate.coerce(obj0);
Number num1 = delegate.coerce(obj1);
return delegate.divide(num0, num1);
}
正如您在方法開始時所看到的,如果兩個操作數都為null ,則它們是一個檢查。
如果是,則返回0(零),並且將在您的JSP站點上顯示為字符串。
因此,它與數學規則無關。
希望這會有所幫助。
最好的祝福
rikku47
PS:
簡而言之,您可以致電:
org.apache.el.lang.ELArithmetic.divide(null, null);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.