Develop
2013.04.23 16:22

OGNL(Object Graph Navigation Language)

조회 수 15727 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
[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)
?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
25 Develop 라이브러리에 대한 설명 (static & dynamic library) hooni 2013.04.23 6944
24 Develop 레고 NXT 마인드스톰 밸런싱 로봇 ㅎㅎ file hooni 2013.04.23 57714
23 Develop 레고 마인드스톰 NXT 수도쿠, 큐브 소스코드.. 20 file hooni 2013.04.23 81418
22 Develop 리팩토링 계획안 file hooni 2017.05.15 748
21 Develop 링크들 보고 지울 내용 secret hooni 2019.11.21 0
20 Develop 모터에 대한 pid 제어.. ㅎㅎ file hooni 2013.04.23 18878
19 Develop 밸런싱 로봇.. 최종.. (관련 논문도 첨부) ㅋㅋ file hooni 2013.04.23 22820
18 Develop 베지어 곡선(Bézier curve) 알고리즘(spline 곡선) 3 file hooni 2013.04.23 33264
17 Develop 사이버보안실무 발표자료 (2017.06.08) file hooni 2017.06.05 1205
16 Develop 사이버보안실무 수업 메모 secret hooni 2017.03.23 0
15 Develop 서기의 PHP 동영상 강의(싱싱해) hooni 2013.05.15 30980
14 Develop 아이 훌레시 작업중 ㅋㅋ secret hooni 2013.08.09 0
13 Develop 알고리즘 성능 분석 기준 hooni 2014.06.24 2785
12 Develop 알고리즘 성능분석 file hooni 2014.06.24 2965
11 Develop 웹페이지 성능 테스트 툴 설명 hooni 2013.04.23 27445
10 Develop 이어서 작업할 내용~ secret hooni 2013.11.21 0
Board Pagination Prev 1 ... 49 50 51 52 53 Next
/ 53