2012-06-14 2 views
1

Struts에서 작업 중이며 이상한 동작이 발생했습니다. 어떤 오류나 버그를 만들지는 않았지만 나는 당신과 그것을 공유하는 것이 흥미로울 것이라고 생각했습니다.Struts2에서 이상한 동작이 발생했습니다.

아마 왜 이런 일이 일어 났는지 설명 할 수 있습니다. 관련 매핑을 작성

public class MyAction extends ActionSupport { 
    private Map<String, Map<String, Object>> map = new HashMap<String, Map<String, Object>>(); 
    public String execute() { 
     System.out.println(map); 
     return SUCCESS; 
    } 

    public Map<String, Map<String, Object>> getMap() { 
     return map; 
    } 

    public void setMap(Map<String, Map<String, Object>> map) { 
     this.map = map; 
    } 
} 

및 JSP로 필요하고 작업을 실행 -

는 다음 코드를 사용하여 스트럿츠 액션을 만듭니다. 당신은 콘솔 출력은 다음을 참조한다 -

{systemProperties={java.runtime.name=Java(TM) SE Runtime Environment, sun.boot.library.path=C:\Program Files\Java\jdk1.6.0_32\jre\bin, java.vm.version=20.7-b02, shared.loader=${catalina.base}/shared/classes .... 

그래서 분명히 스트럿츠 내지도로 시스템 등록 정보를 주입한다. 하지만 왜 그렇게하고 있습니까? 나는 그렇게하도록 요구하지 않았다. 필자가 사용한 특별한 XML 설정이나 주석은 없습니다. Struts의 어떤 부분 (어떤 인터셉터)이 이것을 담당합니까? 방금 버그를 발견 했습니까? 아니면이 정상적인 동작입니까? Struts 개발자가 시스템 속성을 가진 모든 Map<String, Map<String, Object>>을 주입하는 것이 현명하다고 생각하는 이유는 정상입니까?

+0

스프링 구성 XML에'autowire' 매개 변수를 설정 했습니까? – plucury

+0

@ plucury 왜 그 점이 달라졌습니까? 스프링은 빈 의존성을 주입한다. 컬렉션을 삽입하지 않습니다. –

+0

메소드를 설정하면 Spring에서 모든 유형의 속성을 주입합니다. – plucury

답변

0

나는 이걸 나 자신과 내 추측이 맞았다. 여기에 입력 한 코드는 그러한 결과를 산출하지 않습니다. 코드를 살펴봄으로써 이것을 쉽게 발견 할 수 있습니다. 아무 것도지도를 ​​채우는 것이 아니라 단지 getters와 setter입니다. 이 작업에 매개 변수를 전달하면

"So apparently Struts is injecting the system properties into my map"

, 형태와 예를 들어, Struts는 액션에 대응하는 세터 메소드를 찾습니다. 이는 코드, 양식 또는 매개 변수의 어딘가에 "map"이라는 항목이이 작업에 전달되었음을 나타냅니다.

먼저 struts.xml을 살펴보고 거기에서 일부 매개 변수를 설정하고 있는지 확인하십시오. 그렇지 않다면 행동을 호출하는 위치와 매개 변수를 보내는 위치를 자세히 살펴보십시오. 그런 다음지도에서 전달할 위치를 찾을 수 있어야합니다.

+0

테스트 응용 프로그램을 공유 할 수 있습니까? 나는 그것을 시도했고 그것은 나를 위해 그 결과를 만들어 냈다. –

+0

"깨끗하게"사용해 보셨습니까? 코드에서 MyAction2라는 새 ActionClass를 만듭니다. 그런 다음 에 대한 struts.xml 매핑을 만듭니다. 그런 다음 localhost/testAction으로 이동하여 테스트하십시오. 당신은 아마 어떤 종류의 404를 얻게 될 것이지만 출력을보십시오. 지도는 비어 있어야합니다. 비어 있지 않으면 앱의 무언가가 속성 "지도"를 설정하고 있음을 의미합니다. 이것은 당신의 행동이 무언가를 확장하고 있거나 펑키 물건을 다루는 인터셉터를 가지고 있음을 의미 할 수 있습니다. – user829237

관련 문제