2013-02-26 26 views
0

我實現一個通用的控制器,使得它處理的JS/CSS文件的綱領性聲明,表示爲一個ArrayList,然後將其加入到推到JSP模型&。的Spring MVC模式窒息的ArrayList

的問題是,一切正常,直到我添加文件路徑到additionalJsFilePath列表,在其中得到了一個空白頁面(沒有,沒有HTML標記)在瀏覽器中。

相關代碼如下:

LoginController.java(擴展BaseController)

@RequestMapping(value="/login", method = RequestMethod.GET) 
public String login(ModelMap model) { 
    doInitialRenditions(); 

    this.addJsFilePath("../jquery.min.js"); // THIS LINE BREAKS IT 
    /* 
    this.addJsFilePath("../jquery.otherfile.js"); 
    this.addJsFilePath("../xxxx.login.js"); 
    */ 
    doFinalRenditions(model); 

    model.addAttribute("jsFile", "../jquery.min.js"); 
    return "login"; 

} 

BaseController.java

@Controller 
public class BaseController { 

public List<String> additionalJsFilePaths; 
public List<String> additionalCssFilePaths; 

protected void init(){ 
    additionalJsFilePaths= new ArrayList<String>(); 
    additionalCssFilePaths= new ArrayList<String>(); 
} 

protected void doInitialRenditions(){ 
    init(); 
} 

protected void addJsFilePath(String path){ 
    additionalJsFilePaths.add(path); 
} 

protected void addCssFilePath(String path){ 
    additionalCssFilePaths.add(path); 
} 

protected void doFinalRenditions(ModelMap model){ 
    model.addAttribute("jsFiles", additionalJsFilePaths); 
    model.addAttribute("cssFiles", additionalCssFilePaths); 
} 
} 

我還沒有把任何代碼訪問jsFiles大號ist在.jsp中,所以問題在於上面的兩個文件。只是填充ArrayList的事實足以破壞它。另外:同樣的事情發生在LoginController中的所有BaseController代碼中,所以不要認爲這是繼承的一些愚蠢的錯誤。

感激地收到任何幫助。

回答

0

解決......之類的。代碼的操作本身沒什麼問題(忽略了是否執行上面的js/css事情的問題)實際上,由於JVM,扼流圈實際上是筆記本電腦上的交換文件使用情況(儘管它花費了很多時間適當的提醒,以實現日誌記錄,以找出答案)。乾杯您的時間&對不起,紅鯡魚。一個

1

Annoations是不能繼承的LoginController那麼是不是一個控制器,你可以從一個基類繼承,但需要標註的每個子類(每個單獨的控制器)..

而且這聽起來像艾利壞主意

such that it handles programmatic declarations of js/css files 

獨立的視圖和控制器邏輯 - MVC。在配置文件中聲明並映射靜態資源。

檢查你的服務器日誌(啓用日誌記錄)。

對於基本的異常處理,這聽起來LIK億郵需要,你建議立即進行刪除dthink abotu加入這樣的事情你basecontrollerr

@ExceptionHandler(Exception.class) 
    public String myExceptionHandler(final Exception e) { 
     final StringWriter sw = new StringWriter(); 
     final PrintWriter pw = new PrintWriter(sw); 
     e.printStackTrace(pw); 
     final String strStackTrace = sw.toString(); // stack trace as a string 
     logger.error(strStackTrace); // send to logger first 
     emailService.sendAlertMail(strStackTrace); 
     return "exception"; // default friendly excpetion message for user 
    } 
+0

謝謝,但LoginController中的註解,我故意沒有在這裏重現整個班級的清晰度。正如我在原來的規定問題,它會一直工作,直到列表項被添加,因此問題不能在沒有拿起控制器的情況下使用。對於MVC邏輯:是的,當然資源是真正靜態的(即,在所有頁面上都是共同的) - 在這裏,然而,我們正在添加一個獨立於個別頁面的東西 – tacticAl 2013-02-26 12:17:13

+0

@tacticAl基本控制器上的註釋是多餘的。「我們正在添加東西這對於單個頁面是唯一的「 - 如果它是查看/顯示邏輯,則不要在控制器中執行它,它完全違背了您剛剛表示同意的架構模式MVC。此外,你有很多邏輯來添加一個模型屬性,本身不應該這樣做。 – NimChimpsky 2013-02-26 13:14:16

+0

_Also,你有很多的邏輯只需添加一個模型屬性,它本身不應該做。_我給你留下了一個明顯的結論,即當這件事情做到應有的一切時,將會添加多少屬性*。我們在這裏受到傷害。問題是ArrayList問題 - 服務器日誌對此沒有提及。 – tacticAl 2013-02-26 14:00:43