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 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
apache struts2 취약점 검증이번에는 보안 캠프의 과제였던 apache struts2의 취약성에 대해 실제로 손을 움직여 실행해 보고 싶습니다. 환경 VirtualBox에서 브리지 어댑터 사용 호스트:macOS 10.12 게스트:ubuntu 1...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.