Develop
2013.04.23 16:22
OGNL(Object Graph Navigation Language)
조회 수 15792 댓글 0
[07-D10] OGNL(Object Graph Navigation Language)
[01] OGNL(Object Graph Navigation Language)
- http://www.ognl.org/
- %{ ... }안에 접근 문자열을 지정합니다. 반면에 EL은 ${ ... }로 시작합니다.
- 객체 접근을 정규 표현식을 이용한 문자열의 변경처럼
객체에 접근 할 수 있는 간결한 방법을 제공합니다.
1. struts2에서 OGNL을 이용하여 application운용과 관련된 servlet 자원에 접근하기위한 저장소의 구조
컨텍스트 맵 ---+-- application
|
+-- session
|
+-- value stack(root 오브젝트, Action이 가지고 있는 멤버 변수 값)
| s:property 태그, EL과 같은 방법으로 접근(request 객체 내부)
|
+-- request
|
+-- parameters
|
+-- atrr(page, request, session, application 영역 검색)
2. Action의 멤버 변수에 접근
EL : ${name}
Struts2 XML TAG: <s:property value="name" />
Scriptlet : String name = (String)request.getAttribute("name")
최종적으로 public String getName(){ } 호출
3. Action의 public List getListString() 호출하여 요소 출력
- 문자열 출력의 경우
<s:iterator value="listString">
<li><s:property /></li>
</s:iterator>
4. Action안에 저장된 객체의 출력
<s:label>제품 이름: </s:label>
<!--
public Product getProduct() : DTO 추출
public String getName() : DTO안의 멤버 변수(Attribute) 추출
-->
<s:property value="product.name" />
5. Action에 저장된 객체 목록의 출력시 env(개발자가 변경 가능) 환경 객체의 사용
env는 개발자가 변경 가능
<s:iterator value="listProduct" status="env">
<tr bgcolor='<s:if test="#env.odd == true">lightgrey</s:if>'>
<td><s:property value="name" /></td>
<td><s:property value="modelNo" /></td>
</tr>
</s:iterator>
6. session 객체에서의 null 검사
- session과 같은 root오브젝트가 아닌 자원의 접근하려면
변수명앞에 '#'을 붙입니다.
- session 객체에 저장된 'name'키로 등록된 객체를 가져옴
<s:property value="#session.name" />
또는
<s:property value="#session['name']"/>
- session 객체의 조건 비교
<s:if test="%{#session.user != null}">
<span class="headerMenu">
<a href="<%=root %>/login/logout.action">로그아웃</a> |
</span>
</s:if>
<s:else>
<span class="headerMenu">
<a href="<%=root %>/login/loginForm.action">로그인</a> |
</span>
</s:else>
7. session 객체에 저장된 DTO 객체의 변수 접근
(로그인 id: <s:property value="#session.user.id"/>)
(로그인 passwd: <s:property value="#session.user.passwd"/>)
(로그인 grade: <s:property value="#session.user.grade"/>)
8. request객체의 접근
#parameters['id'] == request.getParameter("id")
#request['id'] == request.getAttribute("id")
#session['id'] == session.getAttribute("id")
9. 문자열 비교
<s:if test="%{#session.user.grade == 'AA'}">
<a href="<%=root %>/login/logout.action">관리자 로그아웃</a> |
</s:if>
<s:else>
<a href="<%=root %>/admin_login_form.jsp">관리자 로그인</a> |
</s:else>
10. boolean의 비교
<s:if test="%{(#session.user.grade).startsWith('A') == true}">
<a href="<%=root %>/login/logout.action">관리자 로그아웃</a> |
</s:if>
<s:else>
<a href="<%=root %>/admin_login_form.jsp">관리자 로그인</a> |
</s:else>
11. 수치 비교
<td align="center" bgcolor='<s:if test="%{(cnt-xcnt) < 0}">yellow</s:if>'>${cnt-xcnt}</td>
<td align="center" bgcolor='<s:if test="%{(cnt-xcnt) lt 0}">yellow</s:if>'>${cnt-xcnt}</td>
12. 일반 HTML태그에서의 Action내 객체 접근
<input type="text" name="name" id="name" value="${dto.name}" />
아래와 동일
<s:textfield name="name" size="10" value="%{dto.name}" />
13. Application Scope Attribute
- 프로젝트 전체에서 사용가능한 전역 변수
- 모든 사용자, 웹 페이지에서 동일하게 사용
<s:property value="%{#application.totalWebSiteCount}" />
아래와 동일
<% out.print(application.getAttribute("totalWebSiteCount") %>
14. Session Scope Attribute
- 사용자별로 생성되는 session 변수 사용
- 사용자가 로그아웃하면 session변수도 삭제
<s:property value="%{#session.producrCnt}" />
아래와 동일
<% out.print(session.getAttribute("producrCnt") %>
15. Request Scope Attribute
<s:property value="%{#request.grade}" />
또는
<s:property value="grade" />
아래와 동일
<% out.print(reqeuest.getAttribute("grade") %>
16. Request Parameter
- HTML <FORM>태그에서 전송한 데이터
<s:property value="%{#parameters.address}" />
또는
<s:property value="address" />
Struts는 <FORM>태그의 값을 자동으로 저장
아래와 동일
<% out.print(reqeuest.getParameter("address") %>
17. Action Class에서 httpServletRequest , HttpServletResponse 접근
Action implements, ActionSupport extends 할 경우
아래처럼 기술
HttpServletRequest request = ServletActionContext.getRequest();
this.root = request.getContextPath();
18. 각종 Map 출력(키, 값의구조일 경우)
<s:iterator value="mapData">
${key }
${value }
<td align="right"> ${value.commaPrice}</td>
</s:iterator>
사용예)
<s:iterator value="list" status="env">
<s:set name="no" value="#env.index+1" />
<input type="button" name="count" value="수정"
onclick="javascript:updateCheck(<s:property value="#no"/>, ${value.productno}, ${value.price}, ${value.baesong})" />
</td>
<td align="right"> ${value.price}</td>
<td align="right"> ${value.total}</td>
<td>
<input type="button" name="delete" value="삭제"
onclick="javascript:deleteCheck(${value.productno})" />
19. s:url 태그
<s:url id="urlID" namespace="/members2" action="read" >
<!-- getId() 호출 -->
<s:param name="id" value="id"/>
</s:url>
<s:a href="%{urlID}"> <!-- s:url 태그 참조 -->
<s:property value="id" /> <!-- id 출력 -->
</s:a>
20. set 태그
<s:set name="personName" value="person.name"/>
Hello, <s:property value="#personName"/>. How are you?
21. Action class에서 저장된 문자열이 HTML 태그를 포함하는 경우
- 태그를 내용으로 출력
<s:property value="msg"/>
- 태그가 처리되어 결과만 출력
<s:property value="msg" escape="false" />
22. Action class execute()메소드 에서의 HttpServletRequest 객체 접근
HttpServletRequest request = ServletActionContext.getRequest();
System.out.println("request.getContextPath(): " + request.getContextPath());
[출처] OGNL(Object Graph Navigation Language)
-
RSVP 란?
-
RPA란? 어디에 어떻게 쓰이고 누가 만드나?
-
Polynomial time 이란? ㅋㅋ
-
php.ini 설정 안됐을때.. ㅋㅋ
-
OSI (Open Systems Interconnection) 개방형 시스템간 상호 접속
-
OPT와 CAS에 대한 자료.. (교수님 메일로 보내드린 자료..)
-
OpenSSL로 ROOT CA 생성 및 SSL 인증서 발급하기
-
OpenGL 강좌 사이트 모음
-
OGNL(Object Graph Navigation Language)
-
OCB5 Injection 앗싸뵹! ㅋㅋ
-
NAT와 DHCP에 대한 간단한 설명
-
Mac에서 Node.js 설치하기