在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应用程序的大小,重构并不困难……)。