struts2操作类从SuperAction到SubAction方法的层次结构链接

时间:2018-02-01 16:12:02

标签: java inheritance struts2 action chaining

我将现有的struts1应用程序迁移到struts2。我保持Actions和ActionForms类层次结构相同。 struts2操作SuperActionActionSupport延伸,并且ModerlDriven成员变量SuperForm,而SubActionSuperAction延伸,并且ModelDriven成员变量SubForm [更新] 当然,SubFormSuperForm 的子类。 SubActionSuperAction都有一些操作方法 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的末尾重新填充模型属性。 任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

<强> TL; DR

  

链结果使用相同的操作bean创建一个新的值堆栈   并从旧堆栈中填充它。

     

当调用链式动作时,它上面有一个params拦截器   叠加。

     

当调用params拦截器时,它会填充动作bean   行动背景参数。

param拦截器填充的属性包含在内。如果您缺少某些属性检查请求参数,并且您具有属性属性的getter setter。

  

动作链接正在运行,但它没有传递SuperForm属性值

可以使用从模型驱动的根可访问的某些属性  this解决方案。

  

modelDriven拦截器将模型推送到值的顶部   堆栈,所以很容易在JSP中使用它。动作对象位于   模型。因此,可以使用[1]前缀直接引用它。看到   OGNL basics