我已经做了六次,所以我知道这是可能的。我只是记不清楚。
我想用来自用户的HttpSession对象的数据初始化Struts 1 ActionForm的属性,但仅限于首次创建表单时。实际上不要太担心它来自HttpSession,重要的是数据是动态的,每个用户,并且只应该初始化一次。
此外,如果用户更改此字段中的数据,则用户的条目应保持不变。换句话说,当用户第一次看到表单时,他们将看到初始化的数据。如果他们然后更改字段并提交表单(通过调用相关操作),然后稍后返回此表单,他们应该在该字段中看到他们的条目。
显然,在struts-config.xml中初始化字段将不起作用,因为数据是动态的,每个用户。对于表单的构造函数也可以这么说。我看到ActionForm的reset()方法将被调用以将属性重置为默认状态,但我不记得是否在第一次加载表单并在页面中显示之前调用它。我想如果这是一个选项,但我只希望它在第一次调用时进行初始化。这听起来有点复杂(我需要一个boFirstTime成员变量标志或什么?)。
有人可以帮忙吗?
答案 0 :(得分:1)
我最终做的是覆盖ActionForm的reset(),并且仅当它为null或空白时才设置所需的属性。我需要初始化的属性在类成员变量_strMailTo中表示(是的,我知道除了我之外没有人使用下划线作为成员变量)。
事实证明,在第一次使用ActionForm属性填充关联Action的表单字段之前,也会调用reset()。以这种方式,用户第一次看到表单时,我的预先填充的数据就在那里。但是如果他们改变它并且稍后再次登陆表格,他们会在上次提交表格时看到他们放在字段中的文字。
我想也许我也是唯一仍然使用Struts 1的人......
public void reset(ActionMapping mapping, HttpServletRequest request) {
if (_strMailTo == null || _strMailTo.equals("")) {
String strRemoteUser = request.getRemoteUser();
_strMailTo = chOps.UtilityUsers.getEmail(strRemoteUser);
}
}