由於最新版本中提供的安全修復程序,我從2.1.6升級到2.3.15.1。但是,現在表單字段值不會發布到Action類。 基本上,當表單被提交時,我將來自JSP的HashMap
props
填充到Action類中。當我將struts版本升級到2.3.15.1時,這不起作用。沒有代碼改變。當我調試代碼時,我注意到沒有調用setProps
方法。這是不允許的了嗎?有什麼解決方法嗎?只要我恢復struts庫的變化,一切都很完美。請幫忙。升級到struts 2.3.15.1不會在操作類上設置HashMap值
這裏是我的代碼看起來像:
Action類:
private Map<String, Wall> props;
public void prepare(){
//fill up props map here.
}
public String view(){
return INPUT;
}
public String save(){
myService.setProps(props);
return INPUT;
}
public void setProps(Map<String, Wall> props) {
this.props = props;
}
public Map<String, Wall> getProps() {
return props;
}
JSP:
<s:iterator value="props.entrySet()" id="prop" status="propStatus">
<s:textfield name="props['%{#prop.key}'].value" value="%{#prop.value.value}" />
</s:iterator>
+1爲乾淨的迭代器建議。所以,如果提交的屬性名稱是props ['a.b.c']。value?我有類似的東西,我把屬性名稱變成道具['abc']。價值和一切工作正常。在我的情況下,在準備方法中設置地圖很重要,因爲許多操作都依賴於它。 – Nik
@Nik你在地圖上保存哪個道具的鑰匙並不重要。您也可以使用準備來填充地圖,在這種情況下,我不瞭解您的問題,因爲您沒有說出需要發佈的值。國際海事組織我從來沒有使用準備來填充集合,因爲在這種情況下,我需要在'prepare'之前加入'params'攔截器。 –
所以我從準備方法中刪除了地圖,添加了如上所述的註釋,仍然沒有看到被調用的set方法,並且地圖是空的。不知道我錯過了什麼。我的行爲是validationaware,它也有validate()方法。這可能是一個問題嗎? – Nik