Java 我是否应该/可以让Struts 2约定忘记一个动作';s execute()方法?

Java 我是否应该/可以让Struts 2约定忘记一个动作';s execute()方法?,java,struts2,crud,struts2-convention-plugin,dmi,Java,Struts2,Crud,Struts2 Convention Plugin,Dmi,我正在使用Struts 2和进行我的第一步,目前正在使用一些典型的create()、edit()、view()和delete()操作方法开发CRUD操作类(SongCrudAction)。所有这些方法都用@Action注释 通常,我希望从ActionSupport继承有用的默认行为,但这也包括继承execute()方法 使用配置浏览器,我可以看到有一个名为song crud的操作指向它。那songcrud操作已经过时了,我想去掉它,因为我有自己的操作方法来完成所有需要的操作。我想,多亏了Stru

我正在使用Struts 2和进行我的第一步,目前正在使用一些典型的
create()
edit()
view()
delete()
操作方法开发CRUD操作类(
SongCrudAction
)。所有这些方法都用
@Action
注释

通常,我希望从
ActionSupport
继承有用的默认行为,但这也包括继承
execute()
方法

使用配置浏览器,我可以看到有一个名为
song crud
的操作指向它。那
songcrud
操作已经过时了,我想去掉它,因为我有自己的操作方法来完成所有需要的操作。我想,多亏了Struts2约定,
song crud
动作是假定的,尽管我还没有在任何地方声明过

在这种特殊情况下,一种可能的解决方案是为
execute()
方法赋予一些合理的含义,例如,我可以将其用于
view()
操作。缺点是动作类应该根据
execute()
方法的行为(例如
ViewSongAction
而不是
SongCrudAction
)重命名(或注释?)。否则,查看操作的URL将不合适(即
/view song?id=5
/song crud?id=5
更适合)

另一方面,重命名类也会很难看,因为它只是一个CRUD而不是一个view-action类

无论如何,一般的问题仍然存在:每当我从
ActionSupport
继承时,它都会向我提供一个
execute()
方法,该方法可能对我正在做的事情有用,也可能不有用


因此,以某种方式告诉Struts 2异常地忘记我的CRUD操作类中的
execute()
方法似乎是合理的。是这样吗?我怎样才能做到?是否有更好的解决方案?

如果未在操作配置中指定
方法
属性,则默认情况下将运行
执行
方法。如果您不使用来运行您的方法。
ActionSupport
已经通过
execute
方法实现。但是下面带有感叹号图像的注释看起来真的很奇怪

如果在中没有指定execute方法和其他方法 配置框架将引发异常


无论如何,这是正确的,相反,如果您有execute方法和其他方法,那么将执行哪个方法?如果未指定任何方法,您可以省略动作配置中的
method
属性,并使用DMI调用动作中的任何方法,包括
execute
方法。

您希望忘记哪个方法execute?SongCrudAction.execute()继承自ActionSupport,不应显示为“song crud.action”在配置浏览器中。如果扩展ActionSuppost,则应重写execute方法。好的,但这意味着“…给出一些合理的含义…”(见上文),但有上述缺点,对吗?谢谢,Roman C。在“回发默认值”上下文中使用execute()方法似乎是一种常见的方法,正如我在这里发现的:。实际上,我试图省略struts.xml,而是使用约定+注释。当使用XML配置时,我想情况就不同了。在这种情况下,应该可以很容易地防止调用继承的execute()方法:我可以用显式方法名(而不是“execute”)声明所有CRUD操作,那么我如何调用execute()呢?但是,当使用约定+注释时,可调用的操作会自动从“what's there”推断出来,问题是是否有一种方法可以“省略”无论您如何通过XML或注释创建操作配置,如果省略显式方法声明,则将调用execute方法。如果您没有此类方法,则将引发异常,如上所述。如果您想阻止execute方法,最好的方法是使用一个抽象操作来扩展
ActionSupport
,它用
String execute(){return ERROR;}
覆盖execute方法,但我不建议这样做。使用execute,您不需要显式定义方法。好的,非常感谢。我想我将使用上面提到的“Post-Back-Default”模式来“利用”execute方法,因此不需要以某种方式“隐藏”或“禁用”它。