天天看點

Struts2的Preparable接口

完整版見https://jadyer.github.io/

Struts2的Action在實作com.opensymphony.xwork2.Preparable接口後,就可以重寫prepare()方法

此時在Action中,prepare()方法的執行點是在:setXxx()和execute()的執行之前

比如需求:在執行Action的方法前,接收前台隐藏域傳過來的值,再根據該值執行相應邏輯

如前台傳過來ID,我們根據ID查找資料庫對應的使用者資訊,再跳轉到modify()中修改資訊

但實際的運作過程中發現,通過Debug斷點調試得知prepare()方法接收到的ID值是零

即前台隐藏域中的ID值沒有傳過來,事實上問題就出在預設的defaultStack攔截器棧上

其實defaultStack無法接收prepare()需要的資料,而應借助paramsPrepareParamsStack攔截器棧

事實上使用prepare攔截器之前,應先調用params攔截器,prepare()才能接收到表單資料

基于這個思路,于是可以通過各種手段将params攔截器放置在prepare攔截器之前即可

比如将defaultStack中的所有攔截器拷貝到struts.xml的我們自定義的myStack攔截器棧中

再按照paramsPrepareParams7Stack攔截器棧中的params和prepare順序修改二者位置即可