OGNL 표현식 기본 구문 및 사용법 상세 설명

9939 단어
1. 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 표현식의 실례 설명 등을 참고하십시오.

좋은 웹페이지 즐겨찾기