Struts2 模型对象未填充到表单字段
emanlee
阅读:43
2025-05-04 20:05:19
评论:0
以下情况不会自动填充表单字段
public class EmployeeAction extends ActionSupport implements ModelDriven{
private Employee employee=new Employee();
public Object getModel() {
return employee;
}
public String execute() throws Exception {
employee=employeeService.findById(employee.getId());
return super.execute();
}
}
问题是新员工对象,但表单需要旧对象引用,因此手动映射工作正常,
public String execute() throws Exception {
BeanUtils.copyProperties(employee,employeeService.findById(employee.getId()));
return super.execute();
}
如何避免这个对象(新/旧)引用问题
员工.jsp
<s:form action="saveemployee" method="post">
<s:hidden name="id"></s:hidden>
<s:textfield name="name" label="Name" />
<s:textfield name="age" label="Age"></s:textfield>
<s:radio name="gender" label="Gender" list="%{staticMasterMap.gender}" listKey="key" listValue="value" ></s:radio>
<s:label value="DOB"></s:label><fw:datepicker name="dob" id="dob" changeMonth="true" changeYear="true" format="dd/mm/yy" yearRange="1900:2010"></fw:datepicker>
<s:textarea name="address" label="Address"></s:textarea>
<s:submit label="Save"></s:submit>
<s:reset label="Reset"></s:reset>
</s:form>
Struts.xml
<package name="fw" extends="struts-default" namespace="/">
<action name="saveemployee" class="com.example.employee.action.EmployeeAction"
method="save">
<result name="input" type="tiles">employee</result>
<result name="success" type="tiles">employee</result>
</action>
<action name="findemployee" class="com.example.employee.action.EmployeeAction" method="findById">
<result name="success" type="tiles">employee</result>
<result name="input" type="tiles">employee</result>
</action>
</package>
请您参考如下方法:
我没有太多地使用 Struts2 模型驱动接口(interface),因此不能推荐在您的情况下可以做的最好的事情,但如果我是对的,这就是使用模型驱动接口(interface)的陷阱之一。
在您的情况下,当 execute() 方法被调用时,S2 已经获得了对您的模型对象的引用,它将用于这个特定的请求周期。这意味着您正在使用
employee=employeeService.findById(9l);
但框架仍然引用旧模型对象。由于 S2 使用 getter 方法获取引用,因此它不知道您在 execute 方法中正在做什么以及导致数据不一致的原因。
老实说,我不确定这个用例的任何解决方案,并将采用简单的对象支持属性方法。 如果我的输入正确,希望有人可以提供解决方法。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。



