[英]ActionMappingParametersInteceptor - why do I need it
我試圖了解Struts2中ActionMappingParametersInteceptor
類的使用。
查看API:
此攔截器為此請求的值堆棧上的操作映射設置所有參數。 它的操作與
ParametersInterceptor
完全相同,只有參數來自ActionMapping
,而不是ActionContext.getParameters()
方法。
是否存在ActionMapping
類可能包含一組不同於我從ActionContext.getParameters()
獲取的請求參數的情況?
struts的defaultStack
攔截器似乎首先調用了ParametersInterceptor
,然后調用了ActionMappingParametersInteceptor
,但我看不出有任何理由這樣做。
實際上,擴展params
攔截器的actionMappingParams
是使用兩個被覆蓋的方法從動作映射處理參數,並且應該被覆蓋: retrieveParameters
和addParametersToContext
。 第一種方法真正使用ActionMapping
參數。 第二個是將額外參數添加到操作上下文中。
在這個類中,這是一個無操作,因為參數是從同一位置獲取的。 在子類中,應重寫
retrieveParameters()
和addParametersToContext()
。
“no-op”意味着永遠不會工作
向此攔截器添加行為的最佳方法是在您的操作中使用
ParameterNameAware
接口。 但是,如果您希望應用未在操作中實現的全局規則,則可以擴展此攔截器並覆蓋ParametersInterceptor.acceptableName(String)
方法。
ParameterNameAware:
此接口由要聲明可接受參數的操作實現。 與
ParametersInterceptor
一起使用。 例如,操作可能希望創建他們將接受的參數的白名單,或者他們將拒絕的參數黑名單,以防止客戶端設置其他意外(並且可能是危險的)參數。
這是唯一可以將額外參數添加到操作上下文的情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.