该问题与ModelDriven
和Struts 2.3.16有关。由于params
拦截器的行为改为访问传递给动作的参数,需要配置acceptParamNames
列表才能使用ModelDriven
动作。如果acceptParamNames
列表为空,则默认情况下它通过默认模式接受参数。假设我们有一个通过ModelDriven在Struts 2中传递参数以采取行动
ModelDriven
行动:
@Namespace("/modelDriven")
public class ModelDrivenAction extends ActionSupport implements ModelDriven {
private Gangster model = new Gangster();
private String name; //getter and setter
public Object getModel() {
return model;
}
@Actions({
@Action(value="modelDriven", [email protected](location = "/modelDriven/modelDriven.jsp")),
@Action(value="modelDrivenResult", [email protected](location = "/modelDriven/modelDrivenResult.jsp"))
})
public String execute() throws Exception {
model.setName(name);
return SUCCESS;
}
}
模型:
public class Gangster {
private String name; //getter and setter
}
modelDriven.jsp:
<s:form id="modelDrivenForm" action="modelDrivenResult" method="POST" namespace="/modelDriven">
<s:textfield
label="Gangster Name"
name="[1].name"/>
<sj:submit cssClass="btn btn-primary" executeScripts="true" targets="div1"/>
</s:form>
<div id="div1"/>
modelDrivenResult.jsp:
<s:label
label="Gangster Name"
name="name"/><br/>
在操作execute
方法我们得到参数name
应由params
拦截器来填充和初始化模型属性的结果显示它。但问题是参数没有填充。如何获取参数name
由params拦截器填充,因此该操作可以显示值?
我试着在struts-2.3.15.2中做类似于你的问题的东西,它工作正常,没有必要改变acceptParamNames。这只是2.3.16新? –
'acceptParamNames'即使在旧版本中也需要更改,以获取参数通过拦截器,但在新版本中,如果排除参数,则不会生效。另请参阅[Struts 2 Acceptable Parameters](http://stackoverflow.com/a/20267397/573032)和[struts 2 action with no setter getter](http://stackoverflow.com/a/16604527/573032) –
@ SiddharthTrikha你不明白这不是2.3.15.x吗? Struts 2.3。16有不同的实现和行为。 –