我将现有的struts1应用程序迁移到struts2。我保持Actions和ActionForms类层次结构相同。 struts2操作SuperAction
从ActionSupport
延伸,并且ModerlDriven
成员变量SuperForm
,而SubAction
从SuperAction
延伸,并且ModelDriven
成员变量SubForm
。 [更新] 当然,SubForm
是SuperForm
的子类。 SubAction
和SuperAction
都有一些操作方法
SubAction构造函数如下:
public SubAction() {
subForm = new SubForm();
this.superForm(this.subForm);
}
现在,我的情况是我从SubAction的映射中调用SuperAction方法,如:
<package name="sub-pkg" namespace="/subns" extends="struts-default" strict-method-invocation="true">
<action name="subAction_*" method="{1}" class="com.company.SubAction">
<result name="showArchived" type="chain">subAction_list</result>
<result name="list">/jsps/list_logs.jsp</result>
<allowed-methods>list, showArchived</allowed-methods>
</action>
</package>
SuperAction.showArchived()
操作方法在其成员变量superForm.setLogMode()
中设置值,并返回字符串"showArchived"
;从映射中可以看出,它与SubAction.list()
动作方法相关联。此方法从其成员变量SuperForm
中使用logMode
属性subForm
,并返回字符串"list"
以显示list_logs.jsp
。
动作链是有效的,但在SuperAction方法链的这种情况下,它没有将SuperForm属性值logMode
传递给SubAction方法。
有什么建议吗?
的 [更新]
事实上,我发现了一个不是特定于SuperClass / SubClass操作的一般问题。它通常发生在使用 type =&#34;链&#34; NOT 为ModelDriven操作中的模型对象工作。因此,链条不会在动作链2的末尾重新填充模型属性。
任何建议将不胜感激。
答案 0 :(得分:0)
<强> TL; DR 强>
链结果使用相同的操作bean创建一个新的值堆栈 并从旧堆栈中填充它。
当调用链式动作时,它上面有一个params拦截器 叠加。
当调用params拦截器时,它会填充动作bean 行动背景参数。
param
拦截器填充的属性包含在内。如果您缺少某些属性检查请求参数,并且您具有属性属性的getter setter。
动作链接正在运行,但它没有传递SuperForm属性值
可以使用从模型驱动的根可访问的某些属性 this解决方案。
modelDriven
拦截器将模型推送到值的顶部 堆栈,所以很容易在JSP中使用它。动作对象位于 模型。因此,可以使用[1]
前缀直接引用它。看到 OGNL basics