Develop
2013.04.23 16:22
OGNL(Object Graph Navigation Language)
Views 15793 Comment 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)
No. | Category | Subject | Author | Date | Views |
---|---|---|---|---|---|
457 | Develop | [js] 한글주소(URL) 인코딩(encode, Encoding), 자바스크립트(JavaScript) | hooni | 2013.04.23 | 11349 |
456 | Develop |
URI 인코딩, URL 인코딩
![]() |
hooni | 2013.04.23 | 18907 |
» | Develop | OGNL(Object Graph Navigation Language) | hooni | 2013.04.23 | 15793 |
454 | Develop |
[c] 포인터 학습용 예제 소스 코드
![]() |
hooni | 2013.04.23 | 21089 |
453 | Develop |
[c#] 정규표현식을 이용한 문자열에서 태그 제거함수
![]() |
hooni | 2013.04.23 | 17883 |
452 | Develop |
[vb] 문자열에서 태그 제거함수 (Visual Basic)
![]() |
hooni | 2013.04.23 | 22684 |
451 | Develop | [unix] 날짜 관련 쉘 명령어 (특정일 또는 +-시간, 날짜 계산된 값) | hooni | 2013.04.23 | 14894 |
450 | Develop | [js] 자바스크립트를 동적으로 로딩하기 | hooni | 2013.04.23 | 13616 |
449 | Develop | [c#] 파일(File) 쓰기 ㅎㅎ | hooni | 2013.04.23 | 13326 |
448 | Develop |
[php] 한샘 전자발주 시스템..
![]() |
hooni | 2013.04.23 | 12034 |
447 | Develop |
[jsp] RSS(xml) 파싱해서 보여주기 ㅎㅎ
![]() |
hooni | 2013.04.23 | 13245 |
446 | Develop |
[php] 심플한 게시판 ㅋㅋ
1 ![]() |
hooni | 2013.04.23 | 13050 |