Develop
2013.04.23 16:22
OGNL(Object Graph Navigation Language)
조회 수 15965 댓글 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)
번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|---|
623 | Develop | [php] 몽이가 준 ajax 채팅 소스 ㅋㅋ | hooni | 2013.04.23 | 36353 |
622 | Develop | [js] Text 중 URL 형식을 인식해 단축 URL로 변경 | hooni | 2013.04.23 | 8785 |
621 | Develop | [js] jQuery 관련 사이트 링크 모음 | hooni | 2013.04.23 | 18336 |
620 | Develop | [js] 한글주소(URL) 인코딩(encode, Encoding), 자바스크립트(JavaScript) | hooni | 2013.04.23 | 11402 |
619 | Develop | URI 인코딩, URL 인코딩 | hooni | 2013.04.23 | 19016 |
» | Develop | OGNL(Object Graph Navigation Language) | hooni | 2013.04.23 | 15965 |
617 | System/OS | [java] Tomcat/UTF-8 or All 지원 ㅎㅎ | hooni | 2013.04.23 | 17059 |
616 | Etc | 이클립스(Eclipse) 유용한 단축키 ㅋㅋ | hooni | 2013.04.23 | 22129 |
615 | Develop | [c] 포인터 학습용 예제 소스 코드 | hooni | 2013.04.23 | 21181 |
614 | Develop | [c#] 정규표현식을 이용한 문자열에서 태그 제거함수 | hooni | 2013.04.23 | 17962 |
613 | Develop | [vb] 문자열에서 태그 제거함수 (Visual Basic) | hooni | 2013.04.23 | 22876 |
612 | Develop | [unix] 날짜 관련 쉘 명령어 (특정일 또는 +-시간, 날짜 계산된 값) | hooni | 2013.04.23 | 14988 |