OGNL 표현식 struts2 태그 "%,#,$"

4805 단어 struts2
1. OGNL이란 무엇인지, 어떤 특징이 있습니까?  
  
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> 

좋은 웹페이지 즐겨찾기