在struts2中,总是在操作之前调用的方法

在struts2中,总是在操作之前调用的方法,struts2,struts,Struts2,Struts,我需要一个方法,该方法在触发操作之前执行,以进行初始化,从数据库中获取行列表,并以表格形式显示 我可以考虑使用prepare() 因此,通过隐藏字段或查询字符串参数提供的当前页面在prepare()方法中不可用,因为它是在请求参数绑定到操作之前执行的 我可以想到的另一种方法是使用@Before注释的方法,但如果发生任何转换/验证错误,则不会执行此方法 我们是否可以有一个方法保证在执行操作之前(或之后)执行,并且它还可以访问请求参数,而不是prepare()方法的情况 目前,我正在使用一个由@Be

我需要一个方法,该方法在触发操作之前执行,以进行初始化,从数据库中获取行列表,并以表格形式显示

我可以考虑使用
prepare()

因此,通过隐藏字段或查询字符串参数提供的当前页面在
prepare()
方法中不可用,因为它是在请求参数绑定到操作之前执行的

我可以想到的另一种方法是使用
@Before
注释的方法,但如果发生任何转换/验证错误,则不会执行此方法

我们是否可以有一个方法保证在执行操作之前(或之后)执行,并且它还可以访问请求参数,而不是
prepare()
方法的情况

目前,我正在使用一个由
@Before
注释的方法。这需要在从数据库获取行之前进行一些难看的条件检查,如

if(hasrerrors()&&CollectionUtils.isEmpty(list))
在列表的getter方法中,以便在发生转换/验证错误时,列表可以在这个getter方法中初始化,而不是在
@Before
注释的方法中初始化,因为转换/验证错误,该方法实际上不会执行。

在较小的情况下(编辑之前),最后一段只是旁注。这基本上与问题本身无关。因此,它应该像以前一样存在:)怎么样?使用paramspreparamstack或(如果您使用一些特殊的模式匹配器)自定义堆栈。
prepare()
方法似乎使用
paramspreparamstack
调用了两次,这会导致对数据库执行代价高昂的操作。它们是两个完整的堆栈,一个有额外的拦截器。如果您同时使用这两个拦截器,那么您将调用每个拦截器两次,而不仅仅是准备拦截器。用一个或另一个