Programing

Struts 태그에서 #, % 및 $ 기호의 차이점은 무엇입니까?

lottogame 2020. 11. 5. 07:40
반응형

Struts 태그에서 #, % 및 $ 기호의 차이점은 무엇입니까?


나는 Struts2 함께 일하고 있어요 내가 값 스택 변수에 접근있을 때 내가 사용 여부를 모른다 %거나 #또는 $. 올바른 것을 찾을 때까지 모두 시도합니다.

아무도 이것들의 차이점을 설명 할 수 있습니까?


# (파운드 기호) 사용

OGNL은 다음과 같이 ActionContext의 객체를 참조하는 데 사용됩니다.

  • objectName: Action 속성과 같은 ValueStack의 개체 (OGNL 컨텍스트의 기본 / 루트 개체)
  • #objectName: ActionContext에 있지만 ValueStack 외부에있는 객체, 특히 ...
    • #objectName: 기본 작업 범위 (예 : <s:set name="foo" value="'Testing'" />에서 참조 <s:property value="#foo" />) 와 함께 Struts2 데이터 태그를 사용하여 생성 된 ActionContext 객체
    • #parameters.objectName: 요청 매개 변수
    • #request.objectName: 요청 범위 속성
    • #session.objectName: 세션 범위 속성
    • #application.objectName: 애플리케이션 범위 속성
    • #attr.objectName: 페이지, 요청, 세션 또는 애플리케이션 범위의 속성 (순서대로 검색 됨)

위의 범위 맵 참조 (매개 변수, 요청, 세션 및 애플리케이션)는 다음 두 가지 방법 중 하나로 만들 수 있습니다.

  • #scopeName.objectName 또는
  • #scopeName['objectName']

% (퍼센트 기호) 사용

%{ OGNL expression } 일반적으로 문자열 리터럴로 해석되는 속성의 OGNL 평가를 강제하는 데 사용됩니다.

예: <s:property value="myProperty" default="%{myDynamicDefaultValue}" />

@ (at 기호) 사용

@ 기호는 정적 속성 및 메서드를 참조하는 데 사용됩니다. Struts2 속성에서이를 활성화해야 할 수도 있습니다.struts.ognl.allowStaticMethodAccess=true

예 :

@my.package.ClassName@MY_STATIC_PROPERTY
@my.package.ClassName@myStaticMethod

$ (달러 기호) 사용

Struts2 OGNL은 달러 기호를 특별히 사용하지 않습니다. 그러나 일반 JSTL 표현식을 평가하는 데 사용할 수 있습니다. 예를 들면 :

Struts2 : <h1><s:property value="#pageTitle" /></h1>
(같음 ...)
JSTL :<h1>${pageTitle}</h1>


프레임 워크는 표준 명명 컨텍스트를 사용하여 OGNL 표현식을 평가합니다. OGNL을 다루는 최상위 객체는 Map (보통 컨텍스트 맵 또는 컨텍스트라고 함)입니다. OGNL에는 컨텍스트 내에 루트 (또는 기본) 객체가 있다는 개념이 있습니다. 표현식에서 루트 객체의 속성은 특별한 "마커"개념없이 참조 할 수 있습니다. 다른 개체에 대한 참조는 파운드 기호 (#)로 표시됩니다.

프레임 워크는 OGNL 컨텍스트를 ActionContext로 설정하고 값 스택을 OGNL 루트 객체로 설정합니다. (값 스택은 여러 개체의 집합이지만 OGNL에서는 단일 개체로 나타납니다.) 값 스택과 함께 프레임 워크는 애플리케이션, 세션 및 요청 컨텍스트를 나타내는 맵을 포함하여 다른 개체를 ActionContext에 배치합니다. 이러한 객체는 값 스택 (OGNL 루트)과 함께 ActionContext에 공존합니다.

                 |
                 |--application
                 |
                 |--session
   context map---|
                 |--value stack(root)
                 |
                 |--request
                 |
                 |--parameters
                 |
                 |--attr (searches page, request, session, then application scopes)

자세한 내용은 이것을 참조하십시오

OGNL 기준

기본적으로 struts2는 객체 값 스택을 최상위 객체로두고 OGNL을 사용하여이를 참조합니다. 루트 객체는 특별한 "마커"없이 또는 %다른 객체에 대한 참조가 파운드 기호 (#)로 표시됩니다. #은 기본적으로 Application / Session 등에서 객체 / 값을 참조하는 데 사용됩니다.


@Devon Biere를 완료하려면 ...

Use of $ (dollar sign)

You can use ${} in your resource files too. The struts will automatically use OGNL to parse ${}. For example

sample.foo.bar=This is some ${someProperty} //If the someProperty is in valueStack
sample.welcome.message=Welcome dear ${#session.CurrentUser.farsiFirstName}

Please note the $ sign here is just a trigger which ask struts to evaluate the string against OGNL, please do not confuse it with ${} in JSTL

Struts 2 Dynamic message with OGNL

참고URL : https://stackoverflow.com/questions/8007858/whats-the-difference-between-and-signs-in-struts-tags

반응형