Struts 操作中对象内地图属性的正确请求参数是什么?
What is the correct request parameter for map proprerty inside an object in Struts Action?
考虑以下 AnswerAction
:
public class AnswerAction extends CommonAction implements SessionAware {
private CaseNumbering caseNumbering;
(...)
}
和FormCaseNumbering
public class FormCaseNumbering implements CaseNumbering {
private Duplicable innermostElement;
Map<Duplicable, Integer> caseNumbersOfDuplicableFormElements = new HashMap<>();
(...)
}
和DuplicableFormElement
public class DuplicableFormElement implements Duplicable {
protected int id;
protected boolean duplicable;
}
在通过 spring 注入 bean 的 Struts2 应用程序中:
<bean id="caseNumbering" scope="prototype"
class="model.FormCaseNumbering">
<property name="innermostElement" ref="duplicableFormElement"></property>
</bean>
<bean id="answerAction" class="actions.AnswerAction" scope="prototype" autowire="byName">
<property name="caseNumbering" ref="caseNumbering"/>
</bean>
问题:
您如何发送一个请求参数,该参数使用包含具有键 duplicableElement.id=6
和值 Integer=1
的 Map 元素的 caseNumbering 来填充操作?
我的尝试:
由于 caseNumbering
元素是通过 spring 注入的,我填充 innermostElement
没有问题,例如:
(MockHttpServletRequest)request.setParameter("caseNumbering.innermostElement.id","9");
然而如下:
(MockHttpServletRequest)request.setParameter("caseNumbering.caseNumbersOfDuplicableFormElements[6]","1");
将失败:
Invalid field value for field "caseNumbering.caseNumbersOfDuplicableFormElements[6]".
我也尝试过添加一个 AnswerAction-conversion.properties,但没有成功:
Key_caseNumbering.caseNumbersOfDuplicableFormElements=model.DuplicableFormElement
KeyProperty_caseNumbering.caseNumbersOfDuplicableFormElements=id
Element_caseNumbering.caseNumbersOfDuplicableFormElements=java.lang.Integer
CreateIfNull_caseNumbering.caseNumbersOfDuplicableFormElements=true
这在 Struts2 中是否可行(无需创建自定义转换器)?
这是一个类似的问题:Struts 2 map type conversion
答案可以是 found in struts2' mailing list,仍然有效。
简而言之 - struts2 中存在处理此类地图的限制,需要自定义转换器。
考虑以下 AnswerAction
:
public class AnswerAction extends CommonAction implements SessionAware {
private CaseNumbering caseNumbering;
(...)
}
和FormCaseNumbering
public class FormCaseNumbering implements CaseNumbering {
private Duplicable innermostElement;
Map<Duplicable, Integer> caseNumbersOfDuplicableFormElements = new HashMap<>();
(...)
}
和DuplicableFormElement
public class DuplicableFormElement implements Duplicable {
protected int id;
protected boolean duplicable;
}
在通过 spring 注入 bean 的 Struts2 应用程序中:
<bean id="caseNumbering" scope="prototype"
class="model.FormCaseNumbering">
<property name="innermostElement" ref="duplicableFormElement"></property>
</bean>
<bean id="answerAction" class="actions.AnswerAction" scope="prototype" autowire="byName">
<property name="caseNumbering" ref="caseNumbering"/>
</bean>
问题:
您如何发送一个请求参数,该参数使用包含具有键 duplicableElement.id=6
和值 Integer=1
的 Map 元素的 caseNumbering 来填充操作?
我的尝试:
由于 caseNumbering
元素是通过 spring 注入的,我填充 innermostElement
没有问题,例如:
(MockHttpServletRequest)request.setParameter("caseNumbering.innermostElement.id","9");
然而如下:
(MockHttpServletRequest)request.setParameter("caseNumbering.caseNumbersOfDuplicableFormElements[6]","1");
将失败:
Invalid field value for field "caseNumbering.caseNumbersOfDuplicableFormElements[6]".
我也尝试过添加一个 AnswerAction-conversion.properties,但没有成功:
Key_caseNumbering.caseNumbersOfDuplicableFormElements=model.DuplicableFormElement
KeyProperty_caseNumbering.caseNumbersOfDuplicableFormElements=id
Element_caseNumbering.caseNumbersOfDuplicableFormElements=java.lang.Integer
CreateIfNull_caseNumbering.caseNumbersOfDuplicableFormElements=true
这在 Struts2 中是否可行(无需创建自定义转换器)?
这是一个类似的问题:Struts 2 map type conversion
答案可以是 found in struts2' mailing list,仍然有效。
简而言之 - struts2 中存在处理此类地图的限制,需要自定义转换器。