ognl 상세 설명

이 글 은 다음 과 같이 전재 되 었 다.http://book.csdn.net/bookfiles/727/10072722465.shtml
 
1  비 즈 니스 컨트롤 러
import java.util.Date;

import java.util.LinkedList;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class OgnlAction extends ActionSupport {

	// List    

	private List<Person> persons;

	// execute  

	public String execute() throws Exception {

		//   ActionContext  ,    Servlet API

		ActionContext ctx = ActionContext.getContext();

		//   application

		ctx.getApplication().put("msg", "application  ");

		//   session

		ctx.getSession().put("msg", "seesion  ");

		//   request  

		HttpServletRequest request = ServletActionContext.getRequest();

		request.setAttribute("msg", "request  ");

		//  persons  

		persons = new LinkedList<Person>();

		Person person1 = new Person();

		person1.setName("pla1");

		person1.setAge(26);

		person1.setBirthday(new Date());

		persons.add(person1);

		Person person2 = new Person();

		person2.setName("pla2");

		person2.setAge(36);

		person2.setBirthday(new Date());

		persons.add(person2);

		Person person3 = new Person();

		person3.setName("pla3");

		person3.setAge(16);

		person3.setBirthday(new Date());

		persons.add(person3);

		return SUCCESS;

	}

	public List<Person> getPersons() {

		return persons;

	}

	public void setPersons(List<Person> persons) {

		this.persons = persons;

	}

}

이 업무 컨트롤 러 는 각각 application,session,request 에'msg'라 는 문자열 정 보 를 저장 하고 하나의 List 형식 속성 을 정의 하 며 두 개의 Person 형식 요 소 를 추가 합 니 다.설정 파일 에 해당 하 는 설정 을 추 가 했 습 니 다.코드 는 다음 과 같 습 니 다.
<action name="OgnlAction" class="ch8.OgnlAction">
        <result name="success">/showognl.jsp</result>
</action>


 
 2  JSP 보기  
showognl.jsp 는 OGNL 표현 식 의 JSP 보 기 를 사 용 했 습 니 다.보 기 는 Action 에서 처리 하 는 여러 가지 정 보 를 표시 합 니 다.독자 들 은 OGNL 표현 식 을 사용 하여 코드 가 더욱 간결 하고 직관 적 입 니 다.
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/ xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

    <title>Struts2 OGNL   </title>

</head>

<body>    

    <h3>  OGNL    Action   </h3>

    <!-  OGNL     -->

    <p>parameters: <s:property value="#parameters.msg" /></p>

    <p>request.msg: <s:property value="#request.msg" /></p>

    <p>session.msg: <s:property value="#session.msg" /></p>

    <p>application.msg: <s:property value="#application.msg" /></p>

    <p>attr.msg: <s:property value="#attr.msg" /></p>

    <hr />

    <h3>       (projecting)  </h3>

    <p>    20</p>

    <ul>

    <!-    -->

        <s:iterator value="persons.{?#this.age>20}">

            <li><s:property value="name" /> -   :<s:property value="age" /></li>

        </s:iterator>

    </ul>

    <p>   pla1   : <s:property value="persons. {?#this.name=='pla1'} .{age}[0]"/></p>

    <hr />

    <h3>  Map</h3>

    <s:set name="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}" />

    <p>The value of key "foo1" is <s:property value="#foobar['foo1']" /></p>

</body>

</html>


 
 
OGNL 의\#,%,$기호
\#,%,$기 호 는 OGNL 표현 식 에 자주 나타 나 는데 이 세 가지 기호 도 개발 자가 파악 하고 이해 하기 어 려 운 부분 입 니 다.여기 서 필 자 는 그것들의 상응하는 용 도 를 간단하게 소개 한다.
1.\#기호
\#기호의 용 도 는 보통 세 가지 가 있다.
—    루트 가 아 닌 대상 속성 에 접근 합 니 다.예 를 들 어 예제 의\#session.msg 표현 식 은 Struts 2 의 값 스 택 이 루트 대상 으로 간주 되 기 때문에 다른 루트 가 아 닌 대상 에 접근 할 때\#접 두 사 를 추가 해 야 합 니 다.실제로\#ActionContext.getContext();\#session.msg 표현 식 은 ActionContext.getContext().getSession().getAttribute("msg")에 해당 합 니 다. 。
—    예제 의 persons.{?\#와 같은 필터 와 투영(procjecting)집합 에 사용 합 니 다.this.age>20}。
—    맵 을 구성 하 는 데 사 용 됩 니 다.예 를 들 어 예제 의\#{'foo 1':'bar 1', 'foo2':'bar2'}。
기호 2.%
%기호의 용 도 는 로고 의 속성 이 문자열 형식 일 때 OGNL 표현 식 의 값 을 계산 하 는 것 입 니 다.아래 코드 와 같이:
<h3>  Map</h3>

    <s:set name="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}" />

    <p>The value of key "foo1" is <s:property value="#foobar['foo1']" /></p>

    <p>   %:<s:url value="#foobar['foo1']" /></p>

    <p>  %:<s:url value="%{#foobar['foo1']}" /></p>

3.$기호
$기 호 는 주로 두 가지 용도 가 있 습 니 다.
—    국제 화 자원 파일 에서 OGNL 표현 식 을 참조 합 니 다.예 를 들 어 국제 화 자원 파일 의 코드:reg.agerange=국제 화 자원 정보:나 이 는${min}과${max}사이 에 있어 야 합 니 다.
—    Struts 2 프레임 워 크 의 설정 파일 에서 OGNL 표현 식 을 참조 합 니 다.예 를 들 어 다음 코드 세 션 과 같 습 니 다.
<validators>

    <field name="intb">

            <field-validator type="int">

            <param name="min">10</param>

            <param name="max">100</param>

            <message>BAction-test  :     ${min} ${max}  !</message>

        </field-validator>

    </field>

</validators>

 

좋은 웹페이지 즐겨찾기