OGNL 표현식 struts2 태그 "%,#,$"
4805 단어 struts2
OGNL(Object-Graph Navigation Language)은 대체로 대상의 도형화된 내비게이션 언어로 이해할 수 있다.대상 속성을 편리하게 조작할 수 있는 소스 표현식 언어다.OGNL의 특징은 다음과 같습니다.
1. 지원 대상 방법 호출, 형식: objName.methodName();
2. 클래스의 정적 방법 호출과 값 접근을 지원한다. 표현식의 형식은 @[클래스 전체 이름(패키지 포함)]@[방법 이름|값 이름]이다. 예를 들어 다음과 같다.
@java.lang.String@format('foo%s','bar') 또는 @tutorial.MyConstant@APP_NAME;
3. 값 부여 작업과 표현식 연결을 지원한다. 예를 들어 다음과 같다.
price=100,discount=0.8,calculatePrice(), 이 표현식은 80을 되돌려줍니다.
4. OGNL 컨텍스트(OGNL context)와ActionContext에 액세스합니다.
5. 조작 집합 대상.
2. OGNL 표현식 사용
OGNL은 struts 태그와 함께 사용합니다.비교적 유연하기 때문에 사람을 어지럽히기 쉽다. 특히 '%', '#', '$' 세 기호의 사용이 그렇다.$은(는) EL에 널리 사용되기 때문에%와 # 기호의 사용법을 중점적으로 씁니다.
1.'#'기호는 세 가지 용도가 있다.
(1) OGNL 컨텍스트와 Action 컨텍스트와 같은 비루트 객체(struts 중간값 스택에 대한 액세스)getContext();다음 표에는 몇 가지 ActionContext에서 유용한 속성이 있습니다.
다음에 대응하는 것은 각각 명칭, 작용, 예이다
parameters
현재 HTTP 요청 매개 변수를 포함하는 Map
#parameters.id[0]의 작용은 Request에 해당한다.getParameter("id")
request
현재 HttpServletRequest의 속성(attribute)을 포함하는 Map
#request.userName은 Request에 해당합니다.getAttribute("userName")
session
현재 HttpSession의 속성(attribute)을 포함하는 Map
#session.userName은session과 같습니다.getAttribute("userName")
application
현재 적용된 서브렛Context의 속성(attribute)을 포함하는 Map
#application.userName은 응용 프로그램에 해당합니다.getAttribute("userName")
주:attr는 Request > session > 응용 프로그램 순서에 따라 속성 (attribute) 에 접근하는 데 사용됩니다. #attr.사용자Name은 세 개의 범위 (scope) 내에서userName 속성을 찾을 때까지 순서대로 읽는 것과 같습니다.책과 같은 필터 및 투영 집합에 사용합니다.{?#this.price<100};#{'foo1':'bar1','foo2':'bar2'}와 같이 Map을 구성합니다.
(2),books.{?#this.price>35}
books.{?#this.price>35}
(3)、구조맵, 예를 들어: #{'foo1':'bar1','foo2':'bar2'}
#{'foo1':'bar1','foo2':'bar2'} 이런 방식은 라디오나 select, checkbox 등 라벨에 값을 부여하는 데 자주 쓰인다.페이지에서 맵 값을 찾으려면 다음과 같이 쓸 수 있습니다.
2.'%'기호의 용도는 탭의 속성 값이 문자열 형식으로 이해될 때 실행 환경%{}에 있는 OGNL 표현식을 알려주는 것이다.
이것은 처음에 내가 가장 이해할 수 없었던 기호이다. 왜냐하면 일부 관련 자원이 표현할 때 준비를 하지 않았기 때문이다. 고통스러운 탐색을 통해 마침내 그 용도를 알게 되었다.실제로는 문자열로 이해되는 표현식이 진정ognl로 실행되는 것이다.약간 자바스크립트에 있는 eval 같기도 하고.r() 기능(예:
var oDiv = eval_r("document.all.div"+index)
var oDiv = eval_r("document.all.div"+index)
index 변수가 1인 경우 문은 var oDiv = document으로 간주됩니다.all.div1 var oDiv = document.all.div1에서 실행합니다.%{} 바로 이 작용을 한다
이제 예를 들면 다음과 같습니다.
<s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/>
<s:property value="#myMap['key1']"/>
<s:url value="#myMap['key1']" />
<s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/>
<s:property value="#myMap['key1']"/>
<s:url value="#myMap['key1']"/>
위의 코드 두 번째 줄은 페이지에'value1'을 출력하고 세 번째 줄은'#myMap['key1']'이라는 문자열을 출력합니다.세 번째 줄을 이렇게 바꾸면 다음과 같습니다.
<s:url value="%{#myMap['key1']}"/>
<s:url value="%{#myMap['key1']}"/>
는 "value1"으로 출력됩니다. 이것은struts2의 서로 다른 라벨이ognl의 표현식에 대한 이해가 다르다는 것을 설명한다.만약 어떤 라벨이 '#myMap ['key1']과 유사한 문장을 이해하지 못할 때,% {}로 이것을 괄호해서' 번역 '을 해야 한다.
3. "$"는 두 가지 용도가 있다
(1) 국제화 자원 파일에서 OGNL 표현식을 참조한다.
(2) Struts 2 구성 파일에서 OGNL 표현식을 참조합니다.
<action name="saveUser" class="userAction" method="save">
<result type="redirect">listUser.action?msg=${msg}</result>
</action>
<action name="saveUser" class="userAction" method="save">
<result type="redirect">listUser.action?msg=${msg}</result>
</action>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
한 편의 문장으로 Struts2의 유형 전환을 해결하다우리는 HTTP를 통해 백그라운드에 제출된 데이터가 모두 문자열의 형식이라는 것을 알고 있으며, 우리가 필요로 하는 데이터 형식은 당연히 문자열 형식 하나만 있는 것이 아니다.그래서 우리는 유형 전환이 필요하다!다음...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.