[英]How to let struts2 only validate on POST
例如,我有一個add方法,該方法在“ get”中顯示一個表單
並在“發布”中執行添加邏輯,即驗證,調用服務方法等。
在“獲取”階段,我不想驗證
但是struts2始終在這兩個階段中進行驗證。
如何配置struts2僅在“ post”上驗證?
忘了REST行為調用相同的URL,並根據您慣用的Http動詞做不同的事情 :
@RequestMapping(value = "/foo", method = RequestMethod.GET)
public ModelAndView ReadFoobar(Locale locale,
Model model,
HttpServletRequest request){
String foobar = getService().loadFoobar();
ModelAndView mav = new ModelAndView("foobarPage")
mav.addObject("foobar",foobar);
return mav;
}
@RequestMapping(value = "/foo", method = RequestMethod.POST)
public String InsertStuff(@RequestParam("stuff") String stuff,
Locale loc,
Model model,
HttpServletRequest req){
validate();
getService().insertStuff(stuff);
return "stuffPage";
}
那就是Spring MVC,這就是Struts2。 您需要根據“動作”進行推理; 與其使用Http動詞,不如使用不同的動作並僅對其中一個定義驗證。 例如:
代表GET的動作
public class ReadFoobar {
@Getter private String foobar;
public String execute(){
foobar = getService().loadFoobar();
return SUCCESS;
}
}
代表POST的動作
public class InsertStuff {
@Setter private String stuff = "";
public String execute(){
getService().insertStuff(stuff);
return SUCCESS;
}
public void validate(){
if (stuff.length()<3){
addFieldError("stuff","The mininum length is 3");
}
}
}
此時,將您的readAction僅與GET請求相關聯:
<s:a action="ReadFoobar">check out this Foobar</s:a>
而insertAction僅用於POST請求:
<s:form action="InsertStuff" theme="simple">
<s:textfield name="stuff" />
<s:fielderror fieldName="stuff" />
<s:submit value="Insert the stuff" />
</s:form>
您可以通過為每個Action類指定一個不同的XML文件來對XML驗證執行相同的操作。 您還可以在同一個Action類中有兩個方法,並通過在操作名稱后使用方法名稱重命名XML,從而在方法級別指定不同的XML驗證(或不進行驗證)。
最后,如果您仍然想確保絕對沒有請求,即使在繞過UI時也無法做到。 在GET模式下的ReadFoobar中,您可以編寫一個簡單的攔截器(如果不想通過GET / POST作為參數,則可以編寫兩個)並將其應用於所需的Action。
例如。 編寫一個BlockGetRequestsInterceptor,它將阻止所有GET請求,並將其應用於InsertStuff Action(我建議使用struts.xml或帶有批注(如果使用Convention插件,則建議使用批注)):
public class InsertStuff {
@Action(interceptorRefs={
@InterceptorRef("BlockGetRequestsInterceptor"),
@InterceptorRef("defaultStack")})
public String execute(){
getService().insertStuff(stuff);
return SUCCESS;
}
// ...
我也喜歡Spring MVC,但是如果您想要/需要/正在使用Struts2,請以正確的方式使用它,按照設計的方式使用它,否則可能會成為一場噩夢;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.