我實現一個通用的控制器,使得它處理的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代碼中,所以不要認爲這是繼承的一些愚蠢的錯誤。
感激地收到任何幫助。
謝謝,但LoginController中的註解,我故意沒有在這裏重現整個班級的清晰度。正如我在原來的規定問題,它會一直工作,直到列表項被添加,因此問題不能在沒有拿起控制器的情況下使用。對於MVC邏輯:是的,當然資源是真正靜態的(即,在所有頁面上都是共同的) - 在這裏,然而,我們正在添加一個獨立於個別頁面的東西 – tacticAl 2013-02-26 12:17:13
@tacticAl基本控制器上的註釋是多餘的。「我們正在添加東西這對於單個頁面是唯一的「 - 如果它是查看/顯示邏輯,則不要在控制器中執行它,它完全違背了您剛剛表示同意的架構模式MVC。此外,你有很多邏輯來添加一個模型屬性,本身不應該這樣做。 – NimChimpsky 2013-02-26 13:14:16
_Also,你有很多的邏輯只需添加一個模型屬性,它本身不應該做。_我給你留下了一個明顯的結論,即當這件事情做到應有的一切時,將會添加多少屬性*。我們在這裏受到傷害。問題是ArrayList問題 - 服務器日誌對此沒有提及。 – tacticAl 2013-02-26 14:00:43