2010-03-22 48 views
1

我繼承,其中,以減少(我猜這是什麼原因)Action類的數量,大量的動作一個Action類中映射一個支柱1個web應用程序,像:處理數百個動作在Struts2

public XXXAction() throws Exception{ 
    actions = new Hashtable(); 
    actions.put("/XXX/main/load", new Integer(0)); 
    actions.put("/XXX/main/save", new Integer(1)); 
      ...... 
} 

public ActionForward executeAction(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res) 
throws IOException, ServletException 
{ 
try 
    { 
     switch (((Integer) actions.get(action)).intValue()) 
     { 
     case 0: 
      loadXXXMain(); 
      break; 
      case 1: 
     ....... 

等等(在某些動作類中,我幾乎有一百個這些小動作)。

現在我期待在遷移到Struts2的,我希望有一個更清潔,更好的解決方案來處理這個問題,也許不必爲每個小班的一個Action類。你有什麼建議?我不喜歡這個解決辦法,但我不喜歡有數百個Action類的....

謝謝! 羅伯託

回答

2

您可以在一個Action類映射到多個URL每一個由類的不同的方法來處理。查看Struts2文檔here。我通常習慣於將單個url映射到單個Action類,但是我認爲如果它們與相同的域概念(例如CRUD)相關,也可以將一些url組合在一起。

0

聽起來你已經得到了你的手顯著重構。我同意數以百計的細粒度操作聽起來不是一個好的解決方案。

開始之前開始編寫單元測試。也許Selenium可以幫助你。

+0

喜, 所以你覺得唯一的辦法是減少的正確的行動多少?我會說,我可以減少它們,但不是那麼多...其中大多數都是Ajax調用... – Roberto 2010-03-22 10:12:25

+0

我建議幾個這些Action類有一個單一的方法。有可能將幾種方法合併成一個類,並減少類的數量。如果你真的需要所有這些電話,那麼你需要他們。 – duffymo 2010-03-22 12:29:33