2016-06-07 11 views
0

Ich verwende org.springframework.expression.spel.standard.SpelExpressionParser für die Analyse eines Ausdrucks String, aber wenn ich hinzufüge sin(90) zu diesem Ausdruck ich die folgende Störung erhalte:Wie zu bewerten "(1.25> 8)? (2.3125 * sin (90) * 1.25): (2.3125 * sin (90) * 8)" in Java

EL1011E:(pos 50): Method call: Attempted to call method sin(java.lang.Integer) on null context object error.

Jede Idee, wie dieses Problem zu lösen?

+0

Ich denke, die Sie verwenden möchten 'Math.sin()', aber ich kann nicht sicher sein. Können Sie uns den vollständigen Code zeigen, mit dem Sie zu tun haben? –

+0

Ja, ich war müde mit Math.sin() dann bekam ich diesen Fehler EL1007E: (Pos. 55): Feld oder Eigenschaft 'Math' kann nicht auf Null gefunden werden. –

+0

public static BigDecimal eval (String Formel) { \t \t \t \t ExpressionParser parser = new SpelExpressionParser(); \t \t Rückgabe parser.parseExpression (Formel) .getValue (BigDecimal.class); \t \t \t} –

Antwort

3

Lesen Sie das Spring Expression Language (SPEL) Handbuch.

Option 1: §9.5.12 Functions:

You can extend SpEL by registering user defined functions that can be called within the expression string.

Option 2: §9.5.9 Types:

The special T operator can be used to specify an instance of java.lang.Class (the type). Static methods are invoked using this operator as well.

Wenn Sie mit der Option gehen 1, können Sie die sin() Funktion registrieren, und der Ausdruck wird unverändert funktionieren.

Wenn Sie mit der Option gehen 2, dann ist dies, wie der Ausdruck aussehen sollte:

(1.25 > 8) ? (2.3125 * T(Math).sin(90) * 1.25) : (2.3125 * T(Math).sin(90) * 8) 
+0

Vielen Dank..i müde mit Option 2 es funktioniert :) –

+2

Sehen Sie? Das Lesen des Handbuchs beweist tatsächlich die Antworten. Und es ist auch schnell und kostenlos. – Andreas