Jakarta ee 如何在不扩展ActionSupport的情况下使用addActionMessage

Jakarta ee 如何在不扩展ActionSupport的情况下使用addActionMessage,jakarta-ee,struts2,annotations,Jakarta Ee,Struts2,Annotations,我使用@Action来定义我的Action类,但要使用addActionMessage我必须扩展ActionSupport类 由于我的控制器正在扩展一个抽象类,我无法扩展ActionSupport类。 如何使用addActionMessage而不扩展ActionSupport import org.apache.struts2.convention.annotation.Action; @行动 公共类MyClass扩展AbstractOtherClass实现模型驱动{ .... 公共字符串消息(

我使用@Action来定义我的Action类,但要使用
addActionMessage
我必须扩展
ActionSupport

由于我的控制器正在扩展一个抽象类,我无法扩展
ActionSupport
类。 如何使用
addActionMessage
而不扩展
ActionSupport

import org.apache.struts2.convention.annotation.Action;
@行动
公共类MyClass扩展AbstractOtherClass实现模型驱动{
....
公共字符串消息(){

addActionMessage(“g”);这暴露了继承的一个问题;您必须确保在层次结构中的正确位置扩展类。这里的注释是正确的(可能应该是答案):应该扩展
ActionSupport
的是抽象基类

也就是说,这是否是最好的方法还存在争议。S2的类层次结构意味着它肯定是最简单的方法,但您也可以实现适当的接口并使用现有的S2功能来实现相同的结果,尽管需要付出更多的努力


S2(正确地)声称动作可以是POJO,但事实是,如果这样做,你会失去很多S2功能。动作应该被视为客户端(通常是浏览器)之间的接口将web层绑定到web框架并不是一个真正的问题:您可能会失去一点灵活性,但这种灵活性应该在其他地方编码并由web层使用。

为什么不使用AbstractOtherClass扩展ActionSupport?我们在这里有一个答案:)@AleksandrM,请阅读q争论again@DanielMorgan:那么你的问题是什么?这是否意味着唯一的方法是:MyClass应该扩展ActionSupport,我需要创建另一个类(比如A)来扩展abstracOtherClass?并从Action中访问该类?@DanielMorgan否,这意味着你需要决定哪条路线最能表达你的意图。假设我有一个调用d person和两个类继承了person类personA和personB,每个类都有它们的附加属性。因此我需要两个不同的控制器,每个类一个。两个控制器都应该扩展抽象类以避免重新编码,你的想法是什么?哪种方法更好?@Danielmonger取决于。反问:什么动作关于功能是共享的?哪些功能是专门与每个用户类型绑定的?实现模型驱动或直接公开每个用户类型就足够了吗?如果没有细节,就不可能给出有意义的建议,即使这样,也可能归结为偏好问题,或者显而易见。