2011-08-27 4 views
2

다른 많은 중첩 된 객체와 객체 목록이있는 Java 객체가 있습니다. 요청이 클라이언트에서 도착하면 Object가 몇 수준으로 만 채워지는 것을 볼 수 있습니다. Struts 2를 설정하는 설정이 있습니까? 여기에 내 예가있다. Struts 2가 클라이언트에서 POJO를 채우지 않습니다.

class MyActionClass extends ActionSupport { 
    private Abc abc; 
    public Abc getAbc() { 
     return abc; 
    } 
    public void setAbc(Abc abc) { 
     this.abc = abc; 
    } 
    public String populate() { 
     MyService myService = new MyService(); 
     abc = myService.getMyAbc(); 
     return SUCCESS; 
    } 
    public String update() { 
     MyService myService = new MyService(); 
     myService.updateAbc(abc); 
     return SUCCESS; 
    } 
} 

class Abc { 
    private List<Def> defList; 
    private Ghi ghi; 
    public void setDefList(List<Def> defList) { 
     this.defList = defList; 
    } 
    public List<Def> getDefList(){ 
     return defList; 
    } 
    public void setGhi(Ghi ghi) { 
     this.ghi = ghi; 
    } 
    public Ghi getGhi() { 
     return ghi; 
    } 
} 

class Def { 
    private String name; 
    private long id; 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public long getId() { 
     return id; 
    } 
    public void setId(long id) { 
     this.id = id; 
    } 
} 

class Ghi { 
    private List<Def> defList; 
    private String ghiName; 

    public void setDefList(List<Def> defList) { 
     this.defList = defList; 
    } 
    public List<Def> getDefList() { 
     return defList; 
    } 
    public void setGhiName(String ghiName) { 
     this.ghiName = ghiName; 
    } 
    public String getGhiName() { 
     return ghiName; 
    } 
} 

은 내가 populate 메서드를 호출 할 때와 JSP로 보낼 때, 반복 모든 요소가 잘 발생합니다. 그러나 업데이트하려고 할 때, 즉 양식이 제출 될 때 update() 메서드가 호출되지만 인스턴스 변수 abc가 완전히 채워지지 않습니다.

나는 통과 된 URL을 보았고 모든 것이 잘된 것처럼 보입니다. 무슨 일이 일어나는지 말해 줄 게요. URL은

&abc.defList[0].name=alex 
&abc.defList[0].id=1 
&abc.defList[1].name=bobby 
&abc.defList[1].id=2 
&abc.ghi.ghiName=GHINAME 
&abc.ghi.defList[0].name=Jack 
&abc.ghi.defList[0].id=1 
&abc.ghi.defList[1].name=Jill 
&abc.ghi.defList[1].id=2 
이 경우

, abc에서 abcghi.ghiName 내부 defList, 같은 (여기에 이해하기 쉽도록 줄 바꿈으로 분리)입니다 문제없이 채워집니다. 그러나 defListabc.ghi은 채워지지 않습니다. 이것은 Struts 2의 일반적인 행동입니까? 이것이 대체 될 수있는 수단이 있습니까?

+3

당신이 묘사 한 것이 효과가있다면, 당신은 어떤 레벨이라도 갈 수 있습니다. 무시할 부분이 없으므로 어딘가에 오류가 있습니다. struts2에 대해 로깅을 사용할 수 있습니까? 로그에서 많은 정보를 얻을 수 있습니다 (예 : 값 설정 및 설정 실패). – Quaternion

+0

쿼터니언, 도와 줘서 고마워. :) –

답변

1

문제가 해결되었습니다. 스트럿츠 2 바위. 내가 얻은 코드는 버그 수정을위한 것이었기 때문에, 그 안에 무엇이 있는지를 알지 못했고, 한번 체크하지도 않았습니다.

범인은 대체 된 toString() 메서드입니다. 이것은지도에서 null을 확인하지 않고 entrySet() 메서드를 호출했습니다. 이것은 Exception을 생성하고 Struts가 객체를 채우지 못하게합니다.

더 나은 이해를 위해 Struts는 데이터를 채우는 동안 어떤 목적으로 toString() 메서드를 호출합니다. 미래에 누군가가 이것을 직시한다면, toString()을 재정의했는지 그리고 모든 것이 내부에 설정되어 있는지 확인하십시오.

+0

아마 struts 디버그 옵션이 켜져 있었습니까? 작업 공간 어딘가에있는 "struts.devMode"를 검색하십시오. 매핑 작업 중 디버그 정보를 toString()을 호출하여 설명 할 수 있습니다. –

관련 문제