OGNL 표현식 기본 구문 및 사용법 상세 설명
#,%, $기호는 OGNL 표현식에 자주 등장하는데 이 세 가지 기호도 개발자가 쉽게 파악하고 이해하지 못하는 부분이다.여기서 우리는 그것들의 상응하는 용도를 간단하게 소개한다.
1. # 기호의 세 가지 용법
1) 예제의 #session과 같은 비뿌리 객체 속성에 액세스합니다.msg 표현식, Struts 2의 값 창고는 루트 대상으로 간주되기 때문에 다른 비루트 대상에 접근할 때 # 접두사를 붙여야 합니다.실제로 #은 ActionContext와 같습니다.getContext();#session.msg 표현식은 ActionContext와 같습니다.getContext().getSession(). getAttribute("msg") .
2) 필터 및 투영(projecting) 집합에 사용됩니다. 예를 들어 예시된persons.{?#this.age>20}.
3) 맵을 구성하는 데 사용한다. 예를 들어 예시의 #{'foo1':'bar1','foo2':'bar2'}.
2.% 기호
% 기호는 플래그의 속성이 문자열 유형인 경우 OGNL 표현식의 값을 계산하는 데 사용됩니다.다음 코드와 같습니다.
구성 맵
The value of key "foo1" is
%:
%:
실행 인터페이스는 다음과 같습니다.
he value of key "foo1" is bar1
%:#foobar['foo1']
%:bar1
3. $기호
$기호는 주로 두 가지 용도가 있다.
1) 국제화 자원 파일에서 OGNL 표현식, 예를 들어 국제화 자원 파일의 코드:reg.agerange=국제화 자원 정보: 나이는 반드시
${min}과 ${max} 사이입니다.
2) 다음 코드 단편과 같이 Struts 2 프레임의 구성 파일에서 OGNL 표현식을 참조합니다.
10
100
BAction-test : ${min} ${max} !
2. OGNL 일반 표현식을 살펴보겠습니다.
1. OGNL을 사용하여 정적 메서드를 호출할 때는 다음 구문에 따라 표현식을 작성해야 합니다.
@package.classname@methodname(parameter)
2. OGNL에게 자바.lang.Math는 자바를 호출할 때 기본 클래스입니다.lang.Math의 정적 방법은 클래스 이름을 지정할 필요가 없습니다. 예를 들어 @@min(4,10).
3. OGNL에 대해 말하자면 수조와 집합은 같고 모두 아래 색인을 통해 방문한다.
List 가져오기:
리스트의 요소 중 하나를 가져옵니다(배열의 아래 첨자로 리스트의 컨텐트를 가져올 수 있음).
Set 가져오기:
Set에서 요소를 가져옵니다(Set은 순서가 없으므로 아래 첨자로 데이터를 가져올 수 없습니다).×
Map 가져오기:
Map의 모든 키를 가져오려면:
Map의 모든 값을 가져오려면:
맵에서 요소 가져오기(배열의 아래 첨자와 유사하게 List의 컨텐트를 가져올 수 있음):
List 크기를 가져오려면:
4. OGNL을 사용하여 맵(Map)을 처리하는 구문 형식은 다음과 같습니다.
#{‘key1': ‘value1', ‘key2': ‘value2', ‘key3': ‘value3'};
5. 필터링: collection.{? expression}
6. OGNL은 집합에 대해 일부 위조 속성(예를 들어 size, isEmpty)을 제공하여 우리가 속성의 방식으로 방법을 호출할 수 있게 한다. (본질적인 원인은 집합 중의 많은 방법이 자바빈의 명칭 규칙에 부합되지 않기 때문이다) 그러나 우리는 여전히 호출 방법을 통해 위조 속성과 같은 목적을 실현할 수 있다.
7. 필터(filtering)로 집합의 첫 번째 요소를 가져옵니다:collection.{^ expression}
8. 필터(filtering)로 집합의 마지막 요소를 가져옵니다:collection.{& expression}
9. 필터 작업을 사용할 때 #this를 사용합니다. 이 표현식은 현재 교체되고 있는 집합의 대상을 나타내는 데 사용됩니다. (연상 강화된 for 순환)
10. 투영(projection):collection.{expression}
11. 필터와 투영 사이의 차이: 데이터베이스에 있는 테이블에 비해 필터는 줄을 뽑는 작업이고 투영은 열을 뽑는 작업이다.구체적인 예는 다음과 같다.
List에 합격할 객체를 선택하려면 다음과 같이 하십시오.
List에 합격할 객체를 선택한 username:
List에 합격할 첫 번째 객체를 선택한 username:
List에 합격할 첫 번째 객체를 선택한 username:
List에 합격할 마지막 대상을 선택하는username:
List에 합격한 첫 번째 객체를 선택한 다음 크기를 지정합니다.
12. Struts2에서 루트 객체는 ValueStack입니다.Struts2의 모든 프로세스에서 ValueStack의 최상위 객체는 Action 객체여야 합니다.
13. parameters,#parameters.username
request, #request.username
session, #session.username
application, #application.username
attr, #attr.username
위의 여러 객체를 명명된 객체라고 합니다.
14. 정적 접근 방법이나 정적 구성원 변수의 개선
@vs@method
15. Struts2 태그 라이브러리 속성 값의%와 # 번호에 대한 관계:
1). 태그의 속성 값이 OGNL 표현식이면%{}을(를) 추가할 필요가 없습니다.
2). 만약 탭의 속성 값이 문자열 형식이라면, 문자열에 나타나는% {}은 모두 OGNL 표현식으로 해석되고, 해석이 끝난 후에 다른 문자열과 연결하여 마지막 문자열 값을 구성합니다.
3). 모든 속성 값에%{}을 추가할 수 있습니다. 이 속성 값이 OGNL 표현식이라면 탭 처리 클래스는%{}를 무시합니다.
마지막으로 코드로 함께 이야기하고ognl 조작의 예를 간단하게 봅시다.
1) 컨텍스트 환경에서 OGNL 사용
public static void main(String[] args)
{
Map context = new HashMap();
Person person1 = new Person();
person1.setName("zhangsan");
Person person2 = new Person();
person2.setName("lisi");
Person person3 = new Person();
person3.setName("wangwu");
Person person4 = new Person();
person4.setName("zhaoliu");
context.put("person1", person1);
context.put("person2", person2);
context.put("person3", person3);
try
{
Object value = Ognl.getValue("name", context, person2);
System.out.println("ognl expression \"name\" evaluation is : " + value);
Object value2 = Ognl.getValue("#person2.name", context, person2);
System.out.println("ognl expression \"#person2.name\" evaluation is : " + value2);
Object value3 = Ognl.getValue("#person1.name", context, person2);
System.out.println("ognl expression \"#person1.name\" evaluation is : " + value3);
Object value4 = Ognl.getValue("name", context, person4);
System.out.println("ognl expression \"name\" evaluation is : " + value4);
Object value5 = Ognl.getValue("#person4.name", context, person4);
System.out.println("ognl expression \"person4.name\" evaluation is : " + value5);
// Object value6 = Ognl.getValue("#person4.name", context, person2);
// System.out.println("ognl expression \"#person4.name\" evaluation is : " + value6);
}
2) OGNL 호출 방법 사용
public static void main(String[] args)
{
OgnlContext context = new OgnlContext();
People people1 = new People();
people1.setName("zhangsan");
People people2 = new People();
people2.setName("lisi");
People people3 = new People();
people3.setName("wangwu");
context.put("people1", people1);
context.put("people2", people2);
context.put("people3", people3);
context.setRoot(people1);
try
{
Object value = Ognl.getValue("name.length()", context, context.getRoot());
System.out.println("people1 name length is :" + value);
Object upperCase = Ognl.getValue("#people2.name.toUpperCase()", context, context.getRoot());
System.out.println("people2 name upperCase is :" + upperCase);
Object invokeWithArgs = Ognl.getValue("name.charAt(5)", context, context.getRoot());
System.out.println("people1 name.charAt(5) is :" + invokeWithArgs);
Object min = Ognl.getValue("@java.lang.Math@min(4,10)", context, context.getRoot());
System.out.println("min(4,10) is :" + min);
Object e = Ognl.getValue("@java.lang.Math@E", context, context.getRoot());
System.out.println("E is :" + e);
}
3) OGNL 작업 컬렉션 사용
public static void main(String[] args) throws Exception
{
OgnlContext context = new OgnlContext();
Classroom classroom = new Classroom();
classroom.getStudents().add("zhangsan");
classroom.getStudents().add("lisi");
classroom.getStudents().add("wangwu");
classroom.getStudents().add("zhaoliu");
classroom.getStudents().add("qianqi");
Student student = new Student();
student.getContactWays().put("homeNumber", "110");
student.getContactWays().put("companyNumber", "119");
student.getContactWays().put("mobilePhone", "112");
context.put("classroom", classroom);
context.put("student", student);
context.setRoot(classroom);
Object collection = Ognl.getValue("students", context, context.getRoot());
System.out.println("students collection is :" + collection);
Object firstStudent = Ognl.getValue("students[0]", context, context.getRoot());
System.out.println("first student is : " + firstStudent);
Object size = Ognl.getValue("students.size()", context, context.getRoot());
System.out.println("students collection size is :" + size);
System.out.println("-------------------------- --------------------------");
Object mapCollection = Ognl.getValue("#student.contactWays", context, context.getRoot());
System.out.println("mapCollection is :" + mapCollection);
Object firstElement = Ognl.getValue("#student.contactWays['homeNumber']", context, context.getRoot());
System.out.println("the first element of contactWays is :" + firstElement);
System.out.println("-------------------------- --------------------------");
Object createCollection = Ognl.getValue("{'aa','bb','cc','dd'}", context, context.getRoot());
System.out.println(createCollection);
Object createMapCollection = Ognl.getValue("#{'key1':'value1','key2':'value2'}", context, context.getRoot());
System.out.println(createMapCollection);
}
}
총결산
이상은 본고에서 OGNL 표현식의 기본 문법과 용법에 대해 상세하게 설명한 내용입니다. 여러분에게 도움이 되었으면 합니다. 문제가 있으면 언제든지 댓글을 남기고 편집자는 제때에 답장을 드리겠습니다.관심 있는 분들은 계속해서 참고할 수 있습니다: Struts2는ognl 표현식을 통해 투영을 실현하고 Struts2 OGNL 표현식의 실례 설명 등을 참고하십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.