インターフェイスを実装するアクション クラスがありModelDriven
ます。これModelDriven
は通常の POJO です。問題は、そのプロパティの 1 つが別のオブジェクトであることです。
私の ModelDriven is a object called
Person and my person has an attribute called
Address that is another object.
Address has regular properties such as
String ,
Long などを想像してみてください。
フォームを送信するときの JSP ではString
、 、int
、long
inなどの通常のプロパティPerson
はすべて正しくマップされますが、アドレスにマップする必要があるすべてのデータは正しくマップされません。
<s:textfield name="name" id="name" size="25" maxlength="15" />
<s:textfield name="address.zipcode" id="zipcode" size="25" maxlength="15" />
それが私がプロパティをマッピングしようとする方法です。名前のプロパティは正しく理解できますが、個人の住所にプロパティをマッピングする場合、このアプローチは機能しません。
私は何を間違っていますか?
やがて、私のAddress
プロパティはPerson
オブジェクトのインスタンス化で宣言されるので、決してnull
.
編集:要求に応じて、アクション ソースと DTO:
アクション:
@Controller
@Scope("request")
public class AnAction extends BaseAction implements ModelDriven<FakeDTO> {
private static final long serialVersionUID = 8238033889271514835L;
@Autowired
private FakeFacade facade;
private FakeDTO fakeDTO = new FakeDTO();
public String action01() {
return Action.SUCCESS;
}
public String action02() {
this.fakeDTO.setAnswer(this.fakeFacade.fakeFacadeMethod(this.fakeDTO.getComplexObject()));
return Action.SUCCESS;
}
@Override
public FakeDTO getModel() {
return this.fakeDTO;
}
}
メインクラスFakeDTO
:
public class FakeDTO implements BaseDTO {
private static final long serialVersionUID = -2093038083351846003L;
private FakeFilterDTO filter = new FakeFilterDTO();
private String name;
public FakeDTO() {
super();
}
@Override
public FakeFilterDTO getFilter() {
return this.filter;
}
public void setFilter(final FakeFilterDTO filterParam) {
this.filter = filterParam;
}
public String getName() {
return this.name;
}
public String setName(final String nameParam) {
this.name = nameParam;
}
}
クラスFakeFilterDTO
:
public class FakeFilterDTO extends BaseFilterDTO {
private static final long serialVersionUID = 4528040257605851210L;
private Date aDate;
private Long aLong;
private Integer anInteger;
private String aString;
public Date getADate() {
return this.aDate;
}
public void setDataInicial(final Date aDateParam) {
this.aDate = aDateParam;
}
public Long getALong() {
return this.aLong;
}
public void setALong(final Long aLongParam) {
this.aLong = aLongParam;
}
public Integer getAnInteger() {
return this.anInteger;
}
public void setAnInteger(final Integer anIntegerParam) {
this.anInteger = anIntegerParam;
}
public String getAString() {
return this.aString;
}
public void setAString(final String aStringParam) {
this.aString = aStringParam;
}
}
struts.xml
:_
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<include file="META-INF/bsad/struts2/struts-config.xml" />
<package name="reports" namespace="/reports" extends="project-default">
<action name="anAction" class="anAction" method="action01">
<result>/WEB-INF/pages/success.jsp</result>
<result name="input">/WEB-INF/pages/input.jsp</result>
</action>
<action name="generateReport" class="anAction" method="action02">
<result>/WEB-INF/pages/reportGenerated.jsp</result>
</action>
</package>
</struts>
は、 をproject-default
含む include struts-config.xml
and extendsstruts-default
パッケージに配置されますModelDrivenInterceptor
。このインターセプターとそこを通過するブレークポイントにブレークポイントを配置したため、それを保証できます。
前に例として使用した JSP は次のようになります。
<s:textfield name="name" id="name" size="25" maxlength="15" />
<s:textfield name="filter.aString" id="zipcode" size="25" maxlength="15" />
会社のポリシーにより、実際のオブジェクトとその名前をコピー/貼り付けすることは許可されていません。しかし、それがアイデアです。