2013-05-29 5 views
1

. 이 표현식은 일반적으로 수학적 표현식이며 ui를 통해 사용자가 제공합니다. 추가 된 측면은 이러한 표현식이 구성의 일부이며 나중에 다른 프로세스의 일부로 만 평가된다는 것입니다. 또한 표현식에 사용 된 변수 값은 나중에이 프로세스의 일부로 만 사용할 수 있습니다. 따라서 우리는 표현 작성시 사용자에게 기본 유효성 검증을 제공하여 사용자가 평가 시간에 그의 표현이 넘어지지 않는다는 것을 알기를 원합니다. juel 발현 검증

우리는 전에 이것에 대한 JANINO을 사용하지만, 우리가 JUEL와이를 교체하는 - 그것은 훨씬 더 빨리 (그리고 우리가 저점을 얻기 위해 평가의 많은이, 처리량 등 중요하다). 또한 JUEL은 정확히 같은 구문으로 작동합니다. 즉, 백엔드에 연결할 수 있으며 이전 버전과 호환됩니다. (그냥 이전 JANINO 식의 주위에 ${..}을 추가해야

을 우리가 JUEL 하나의 문제가하지만 -이 평가되기 전에 식의 유효성을 검사 할 수있는 방법이 사용되고있다

이 같은

즉 무엇인가.? 올바르게 다음 println(result)을하는

context.getVariableMapper().setVariable("a",expressionFactory.createValueExpression(new Double(1), double.class)); 

context.getVariableMapper().setVariable("b", expressionFactory.createValueExpression(new Double(2), double.class)); 

ValueExpression expression = expressionFactory.createExpression("${a+b}", double.class, context); 

Object result = expression.getValue(context); 

내가 표현 A + B를 요리 할 수 ​​JANINO으로 3

를 출력하고, 형식이 잘못되었거나 잘못된 반환 형식을 반환하는 경우 (즉, double이 아니다) 나는 예외를 얻을 것이다. 그런 다음이를 사용하여 즉시 사용자 입력의 유효성을 검사하고 예를 들어 사용자에게 오류를 수정하도록합니다. 구성을 저장합니다.

JUEL로 이것을 수행하는 방법이 있습니까? 아니면 다른 방법을 아는 사람이 있습니까?

, 감사합니다

루카스

+0

당신이 질문을하고 답변을 얻을 경우, 항상 반응의 일종을 보여주는 좋은 스타일이다. – chris

답변

0

표현 구문 분석 입니다 (읽기 : 검증) expressionFactory.createValueExpression("${a+b}", ...)로 "컴파일". 나중에 Expression.getValue (...)를 사용하여 평가가 수행됩니다.

해석 시간에 변수 (예 : PI 등 상수에 사용)를 사용하는 대신 평가 시간에 속성 (x, y)을 해결하기 위해 ELResolver 메커니즘을 사용하는 것이 좋습니다. 이렇게하려면 ELContext.setValue(...)을 사용하여 평가 전에 속성을 설정하십시오.

구문 해석 시간 및 평가시 동일한 ELContext 인스턴스를 사용할 필요가 없습니다. 구문 분석 컨텍스트 및 평가 컨텍스트의 속성에서 변수 및 함수를 설정합니다.

0

나는 똑같은 문제가있었습니다. 나는 Juel에 자신의 연장을 추가하는 것으로 끝났다. 그것을 실행하기 전에 모든 가능한 측면 (가능한 한 멀리 찾을 수 있음)을 확인하는 새로운 유효 메소 (methof)가 있습니다. 나는 juel 연장을 제안했으나, Juel을 최소한으로 유지하는 것이 더 바람직하다고 생각했다. 언젠가 어느 곳에서나 공유 할 계획이었습니다. 필요가 있다면, 그렇게하면 더 빨리 할 수 ​​있습니다.

- 압라