私は他の多くのネストされたオブジェクトとオブジェクトのリストを持つ Java オブジェクトを持っています。クライアントからリクエストが届くと、オブジェクトがいくつかのレベルにしか設定されていないことがわかります。これを Struts 2 に設定する構成はありますか? これが私の例です。
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
この場合、defList
insideabc
とghi.ghiName
inabc
は問題なく読み込まれます。しかし、defList
のabc.ghi
は移入されていません。これは Struts 2 の一般的な動作ですか? これをオーバーライドできる手段はありますか?