struts 2 에서 JSTL 을 사용 하여 action 의 변 수 를 읽 습 니 다.
이것 은 역사가 유구 한 문제 다.사실 많은 친구 들(나 포함)이 Struts 2 자체 의 태그 라 이브 러 리 를 사용 하지 않 고 JSTL 을 사용 하기 때 문 입 니 다.JSTL 태그 라 이브 러 리 가 적 고 간단 하고 사용 하기 쉬 운 이유 때 문 일 것 입 니 다.
JSTL 기본 값 은 page,request,session,application 등 네 개의 Scope 에서 해당 하 는 EL 표현 식 에 대응 하 는 대상 의 값 을 한 번 씩 찾 는 것 을 알 고 있 습 니 다.그러면 JSTL 을 사용 하여 Action 의 변 수 를 읽 으 려 면 Action 의 변 수 를 request 필드 에 넣 어야 합 니 다.그래서 웹 워 크 2.1.X 시대 에 우 리 는 차단 기 를 만들어 서 이 일 을 할 것 이다.대체적인 원 리 는 Action 이 실행 되 고 돌아 오기 전에 Action 의 모든 변 수 를 차례대로 읽 고 request.setAttribute()를 순서대로 호출 하여 설정 하 는 것 이다.구체 적 인 통합 방식 은 다음 과 같은 문 서 를 참고 하 시기 바 랍 니 다.
그러나 시대 가 발전 함 에 따라 위의 이런 방식 은 더 이상 추천 되 지 않 고 사용 되 었 다.그럼 에 도 불구 하고 우 리 는 그것 의 문 제 를 해결 하 는 방향 을 배 울 수 있다)현재 로 서 는 웹 워 크 2.2 이후 Struts 2 를 포함 하여 모두 다른 통합 방식 을 사용 하여 Http ServletRequest 를 장식 할 수 있다.소스 코드 를 살 펴 보 겠 습 니 다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public class StrutsRequestWrapper extends HttpServletRequestWrapper {
/**
* The constructor
* @param req The request
*/
public StrutsRequestWrapper(HttpServletRequest req) {
super(req);
}
/**
* Gets the object, looking in the value stack if not found
*
* @param s The attribute key
*/
public Object getAttribute(String s) {
if (s != null && s.startsWith("javax.servlet")) {
// don't bother with the standard javax.servlet attributes, we can short-circuit this
// see WW-953 and the forums post linked in that issue for more info
return super.getAttribute(s);
}
ActionContext ctx = ActionContext.getContext();
Object attribute = super.getAttribute(s);
boolean alreadyIn = false;
Boolean b = (Boolean) ctx.get("__requestWrapper.getAttribute");
if (b != null) {
alreadyIn = b.booleanValue();
}
// note: we don't let # come through or else a request for
// #attr.foo or #request.foo could cause an endless loop
if (!alreadyIn && attribute == null && s.indexOf("#") == -1) {
try {
// If not found, then try the ValueStack
ctx.put("__requestWrapper.getAttribute", Boolean.TRUE);
ValueStack stack = ctx.getValueStack();
if (stack != null) {
attribute = stack.findValue(s);
}
} finally {
ctx.put("__requestWrapper.getAttribute", Boolean.FALSE);
}
}
return attribute;
}
}
봤 어 요?이 종 류 는 Struts 2 가 초기 화 될 때 HttpServletRequest 를 교체 하여 전체 Struts 2 가 실행 되 는 과정 에서 request.getAttribute()를 호출 하려 고 할 때 이 방법 을 실행 합 니 다.(이것 은 전형 적 인 장식 기 모드 입 니 다)위의 방법 을 실행 할 때 HttpServletRequest 의 원래 request.getAttribute()를 먼저 호출 합 니 다.찾 지 못 하면 ValueStack 에서 계속 찾 습 니 다.action 은 ValueStack 에 있 기 때문에 action 의 변 화 량 은 OGNL 표현 식 을 통 해 해당 하 는 값 을 찾 을 수 있 습 니 다.
여기 서 엘 표현 식 이 광범 위 하 게 사용 되 는 오늘날,JSTL 1.1 이후 에 도 엘 표현 식 을 직접 사용 할 수 있 습 니 다.struts 2 를 직접 사용 하 는 tag 와 의 차이 점 을 주의 하 십시오.여기 서 el 의 표시 기 호 를 사용 해 야 합 니 다:${}
예 를 들 어${user.name},
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JSP| EL (Experession Language)텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.