>Java >java지도 시간 >웹워크 학습 로드(2) 프론트엔드 OGNL 체험판

웹워크 학습 로드(2) 프론트엔드 OGNL 체험판

黄舟
黄舟원래의
2016-12-23 16:29:331427검색

1. OGNL 등장의 의의

mvc에서는 데이터가 다양한 레벨을 오가며 흐른다는 점은 부인할 수 없는 사실입니다. 그리고 이러한 종류의 순환도 몇 가지 어려움에 직면하게 됩니다. 이러한 어려움은 다양한 세계에서 데이터가 다르게 표현되기 때문에 발생합니다.

a. 데이터 유형이 어떻든 간에 데이터는 페이지에 평평하게 표시됩니다. 데이터 구조가 복잡하거나 데이터 유형이 얼마나 풍부한지는 표시할 때 모두 동일하게 취급되어 문자열이 되어 페이지에 표시됩니다.

b. Java 세계에서는 데이터를 풍부한 데이터 구조와 데이터 유형으로 표현할 수 있으며, 원하는 클래스를 정의하고 클래스 간에 상속할 수 있습니다. 우리는 일반적으로 이 모델을 복잡한 개체 트리라고 부릅니다. 이때 페이지와 Java 세계 간에 데이터가 전송되면 일치하지 않는 것으로 나타납니다. 따라서 이는 해결해야 할 몇 가지 문제로 이어집니다.

c. 데이터가 뷰 계층에서 컨트롤러 계층으로 전달될 때 특정 규칙에 따라 단순하고 분산된 데이터 수집을 설정할 수 있는지 확인해야 합니다. Java 세계의 객체 트리로 이동합니다. 동시에 문자열 유형을 Java의 다양한 유형으로 지능적으로 변환할 수 있습니다.

d. 데이터가 Controller 계층에서 View 계층으로 전달될 때 View 계층이 특정 단순 유형을 사용할 수 있는지 확인해야 합니다. 규칙 개체 트리에 액세스합니다. 동시에 개체 트리의 데이터 표시 형식은 어느 정도 제어됩니다.

이 문제를 좀 더 깊이 생각해 보면, 다양한 표현 형태로 인한 데이터 흐름 불일치 문제를 해결하는 것이 사실 우리에게 낯설지 않다는 것을 알게 됩니다. Java 세계와 데이터베이스 세계에서도 동일한 문제가 발생합니다. 객체 모델과 관계형 모델 간의 불일치에 직면하여 우리가 채택한 솔루션은 Hibernate, iBatis 등과 같은 ORM 프레임워크를 사용하는 것입니다. 이제 웹 계층에서도 불일치가 발생하므로 문제를 해결하는 데 도움이 되는 몇 가지 도구를 사용해야 합니다. 데이터가 View 계층에서 Controller 계층으로 전달될 때 불일치를 해결하기 위해 Struts2는 XWork의 완벽한 솔루션을 채택합니다. 그리고 이를 바탕으로 데이터 흐름의 불일치를 완벽하게 해결할 수 있는 완벽한 메커니즘이 구축되었습니다. OGNL 솔루션 탄생

2. OGNL 프로젝트 실전

OGNL은 Object-Graph Navigation Language의 약자로 간단하고 일관된 표현식 구문을 사용하는 강력한 표현 언어입니다. 를 사용하면 객체의 모든 속성에 액세스하고, 객체의 메서드를 호출하고,
전체 객체의 구조 다이어그램을 탐색하고, 필드 유형 변환과 같은 기능을 구현할 수 있습니다.

a. OGNL을 사용하면 매우 간단한 표현식으로 객체 레이어에 액세스할 수 있습니다. [OGNL은 맵에 대한 키 값 검색을 지원합니다.]

개체의 속성을 직접 클릭할 수 있습니다.

예를 들어 사용자 속성이 목록인 경우 첫 번째 사용자 개체의 이름

예를 들어 사용자 속성은 맵입니다. 사용자 "name" 키에 해당하는 값을 가져옵니다. >

b. 일반 기호보다 자유도가 높고 기능이 강력한 연산자(예: +-*/)를 지원합니다.


c. xxx.doSomeSpecial()

과 같은 객체 메소드 호출을 지원합니다. d. 클래스 정적 메소드 호출 및 값 액세스를 지원하며 표현식 형식은 @입니다. [전체 클래스 이름(패키지 경로 포함)]@ [메서드 이름 | 값 이름], 예: @java.lang.String@format('foo %s', 'bar') 또는 @tutorial.MyConstant@APP_NAME


e. 가격과 같은 할당 작업 및 표현식 연결을 지원합니다. =100, 할인=0.8,calculatePrice(price*discount), 이 표현식은 80

f를 반환합니다. OGNL 컨텍스트 및 ActionContext

g에 액세스할 수도 있습니다. 모든 클래스 객체

/**새로운 Java.net.URL("xxxxxx/")

**/

h.OGNL은 데이터베이스의 것과 유사한 투영 및 선택을 지원합니다.

프로젝션은 관계형 데이터베이스의 필드 작업과 유사하게 세트에 있는 각 요소의 동일한 속성을 선택하여 새로운 세트를 형성하는 것입니다. 프로젝션 작업 구문은 collection.{XXX}입니다. 여기서 XXX는 이 컬렉션에 있는 각 요소의 공용 속성입니다.

/**group.userList.{username}은 그룹에 있는 모든 사용자의 이름 목록을 가져옵니다.

**/

선택은 관계형 데이터베이스의 기록 작업과 유사하게 선택 조건에 맞는 집합 요소를 필터링하는 것입니다. 선택 작업의 구문은 collection.{X YYY}입니다. 여기서 X는 선택 연산자이고 그 뒤에 선택을 위한 논리 표현식이 옵니다. 세 가지 선택 연산자가 있습니다:

? 조건을 만족하는 모든 요소를 ​​선택합니다
^ 조건을 만족하는 첫 번째 요소를 선택합니다
$ 조건을 만족하는 마지막 요소를 선택합니다

/**group.userList.{? #txxx.xxx != null}은 그룹에서 이름이 비어 있지 않은 사용자 목록을 가져옵니다.
**/

i. OGNL은 일반적으로 Struts 2 기호와 함께 사용되며 주로 #, % 및 $ 세 기호를 사용합니다. 사용 방법은 다음과 같습니다.

/**OGNL 컨텍스트 및 Action 컨텍스트에 액세스합니다. #ActionContext.getContext()와 동일합니다. 다음 표에는 ActionContext에 몇 가지 유용한 속성이 있습니다.

parameters 현재 HTTP 요청 매개변수를 포함하는 Map #parameters.id[0]는 request.getParameterValues("id").get(0);

현재 HttpServletRequest의 속성을 포함하는 request Map #request와 동일합니다. .userName은 현재 HttpSession 속성의 맵을 포함하는 request.getAttribute("userName")session과 동일합니다. #session.userName은 다음을 포함하는 session.getAttribute("userName") 애플리케이션의 맵과 동일합니다. 현재 적용된 ServletContext의 속성입니다. #application.userName은 application.getAttribute("userName")

attr은 요청 > 애플리케이션 순서 #attr에서 해당 속성(속성)에 액세스하는 데 사용됩니다. userName은 위의 세 가지와 동일합니다.
는 책과 같은
컬렉션을 필터링하고 프로젝션하는 데 사용됩니다.{?#this.price<100}; 🎜> # {'foo1':'bar1', 'foo2':'bar2'}와 같은 맵을 구성합니다.

%" 기호는 플래그의 속성이 문자열 유형인 경우 OGNL 표현식을 평가하는 데 사용됩니다.

"$"에는 국제화에 사용되는 두 가지 주요 용도가 있습니다. 리소스 파일에서 참조 Struts 2 및 i18n에서 구성 파일

/**

j는 백그라운드 작업 get() set() 메서드 전송을 얻을 수 있습니다.

위 내용은 Webwork 학습경로(2)의 프론트엔드 OGNL 체험 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www. php.cn)



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.