我正在使用Struts 1.3创建一个类似于向导的界面,包含3个jsp页面和3个Struts动作。流程如下: page1> action1 - > page2> action2 - >第3页> ACTION3
我使用会话表单bean(具有会话范围的操作表单)在请求之间共享数据。我遇到的问题是我在第2页中提交的数据在操作2中可用,但在行动3中没有。我有疑问可能是我在第3页上没有表格来保存这些数据,或者因为我打电话action3通过jQuery post方法而不是常规表单提交,但我真的不确定。
我一直在挖掘所有互联网已有近一天但仍然没有运气。谁能提供一些帮助。非常感谢。
答案 0 :(得分:5)
我想您可能已经为StrutsConfig.xml中的操作分配了相同的表单,因此它没有给出ClassCastException。顺便说一下,如果你想访问在action 2中填充的同一个表单bean,请执行以下操作
form2 = (FormBean2) session.getAttribute("form2");
上面的原因是因为两个动作都使用相同的形式,所以struts可能会覆盖它。希望以上将解决您的问题。
答案 1 :(得分:4)
每个请求都会调用表单上的reset()方法,因此您正在丢失状态。您可以通过编程方式控制它。
public class MyForm extends ActionForm {
boolean reset = true;
private String[] checkboxes = {};
@Override
public void reset(ActionMapping mapping, HttpServletRequest request) {
if (reset) {
this.checkboxes = new String[];
// etc
}
reset = true;
}
public void doNotReset() {
reset = false;
}
}
让action2在表单上调用doNotReset()。
答案 2 :(得分:1)
感谢您的所有投入。这是我如何解决我的问题。我真的不喜欢这个解决方案,但它可能是我能找到的最好的解决方案。
在第3页中,我添加了隐藏字段,用于表示我希望在操作中可用的属性3.Struts会将值存储在这些隐藏字段中,当再次提交表单时,数据将重新填充到操作中形式。
在我看来,Struts的工作方式如下:当它加载第3页时,它会尝试使用myForm的值填充第3页中的表单。提交表单时,该过程相反,它使用用户表单中的值填充myForm。问题是,在使用用户提交的值填充myForm之前,它会重置myForm的属性。并且因为在重新设置之后,它没有找到这些字段的值,所以它将它留空。
我不认为Struts以这种方式工作是有道理的,但是......就这样吧。
答案 3 :(得分:0)
如何在action2和action 3中访问page2的表单bean。
我想你是以错误的方式访问的。您是否收到有关无效Cast或其他内容的异常。