在Struts 2中绑定后更改参数

我有一个从用户接收一些参数的动作(例如日期)。 此操作会生成许多不同的报告,因此它有许多不同的方法。 我需要在每个方法之前调整这些参数(将时间设置为午夜)。 在绑定参数之前执行prepare方法。 是否有其他拦截器或任何其他允许我这样做的约定?

使用

  

如果您正在使用Convention插件,请将其应用于操作

 @Action(value="action1", interceptorRefs=@InterceptorRef("paramsPrepareParamsStack")) 

另一种方法(如果您现在正在编码便宜,如果您已经编码了所有内容,则价格昂贵)将模块化您必须在一个Struts2 Action中执行的每个操作。

然后你会有类似BaseReportAction东西,包含使用protected而不是private共享的所有公共属性和方法,在execute()方法中调整参数和常见操作;

我们说,每个报告都有一个Action扩展了BaseReportAction

ExcelReportAction,PdfReportAction等……

要么

MinimalReportAction,CompleteReportAction等……

或者也

DailyReportAction,MonthlyReportAction等……

唯一的要求是使用super.execute(); 作为每个子Action的execute()方法的第一个语句。

这样你就可以利用inheritance,拥有更多更小,更干净(最终打包成几个子包)的Actions而不是一个带有很多方法的巨大Action。

少数报告使用的所有实用方法仅适用于那些报告,而不适用于所有其他报告(比如说PDF和XLS的东西)……

对于不同的操作,您也可以从XMLvalidation中受益(可能一个报告需要来自另一个的不同输入)。

最后,您的调优代码将是线程安全的(操作是线程安全的,拦截器不是)。

但正如所说的,这是一种更适合预编码阶段的实现选择(即使根据Web应用程序的大小,重构并不困难……)。