Contents

Develop
2013.04.23 16:22

OGNL(Object Graph Navigation Language)

조회 수 16112 댓글 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
번호 분류 제목 글쓴이 날짜 조회 수
625 Develop [js] 인터넷 주소(URL) 인코딩 ㅋㅋ hooni 2013.04.23 11427
624 Develop [js] jQuery 관련 문서 ㅎㅎ file hooni 2013.04.23 31400
623 Develop [php] 몽이가 준 ajax 채팅 소스 ㅋㅋ file hooni 2013.04.23 36364
622 Develop [js] Text 중 URL 형식을 인식해 단축 URL로 변경 file hooni 2013.04.23 8803
621 Develop [js] jQuery 관련 사이트 링크 모음 hooni 2013.04.23 18351
620 Develop [js] 한글주소(URL) 인코딩(encode, Encoding), 자바스크립트(JavaScript) hooni 2013.04.23 11410
619 Develop URI 인코딩, URL 인코딩 file hooni 2013.04.23 19030
» Develop OGNL(Object Graph Navigation Language) hooni 2013.04.23 16112
617 System/OS [java] Tomcat/UTF-8 or All 지원 ㅎㅎ hooni 2013.04.23 17075
616 Etc 이클립스(Eclipse) 유용한 단축키 ㅋㅋ hooni 2013.04.23 22139
615 Develop [c] 포인터 학습용 예제 소스 코드 file hooni 2013.04.23 21186
614 Develop [c#] 정규표현식을 이용한 문자열에서 태그 제거함수 file hooni 2013.04.23 17977
Board Pagination Prev 1 ... 42 43 44 45 46 47 48 49 50 51 ... 99 Next
/ 99