簡體   English   中英

JSP中的表達語言:算術運算符部門

[英]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,以及其他所有人。

我想,我找到了解決方案。

我的設置:

  • NetBeans 8.2(內部版本201609300101)
  • Java EE6
  • Apache Tomcat 8.0.27.0

  • Tomcat的碧玉8.0.0-RC1-sources.jar

從此頁面訪問: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM