2013-02-26 2 views
0

Я реализую общий контроллер таким образом, что он обрабатывает программные объявления js/css-файлов, выраженные как ArrayList, который затем добавляется к модели &, вытолкнутой в jsp.Spring MVC Model choking on ArrayList

Проблема заключается в том, что все работает до тех пор, пока я не добавлю путь к списку дополнительныхJsFilePath, в котором я получаю пустую страницу (ничего, без тэгов) в браузере.

Соответствующий код выглядит следующим образом:

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 L ist внутри .jsp, поэтому проблема связана с двумя вышеуказанными файлами. Просто тот факт, что я заполняю ArrayList, достаточно, чтобы сломать его. Также: то же самое происходит со всем кодом BaseController в LoginController, поэтому не думайте, что это некоторая глупая ошибка с наследованием.

Любая помощь с благодарностью получена.

ответ

0

решаемые ... вроде. Ничего плохого в работе с кодом как таковым (игнорируя на мгновение вопрос о том, нужно ли делать js/css, как указано выше. Дроссель был фактически заменой swapfile на ноутбуке благодаря JVM (хотя он взял на себя соответствующее напоминание о том, чтобы выполнить регистрацию, чтобы понять это). Приветствия для вашего времени & Извините за красную селедку.

1

Annoations не наследуются так LoginController не является контроллером, вы можете наследовать от базового класса, но каждый подкласс (каждый отдельный контроллер) должен быть аннотированный ..

Кроме того, это звучит как Эйвери плохая идея

such that it handles programmatic declarations of js/css files 

Отделите свой логический элемент зрения и контроллера - MVC. Объявляйте и сопоставляйте статические ресурсы в файле конфигурации.

Проверьте журналы сервера (включите ведение журнала).

Для основной обработки исключений, которые это звучит Лик eyou нужно, вы Шоул 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

+0

@tacticAl Аннотации на базовом контролере избыточны тогда. «Мы добавляем материал которая уникальна для отдельной страницы »- не делайте этого в контроллере, если это логика просмотра/отображения, она полностью противоречит архитектурному шаблону MVC, о котором вы только что сказали, что согласились. Кроме того, у вас есть много логики, чтобы просто добавить один атрибут модели, который сам по себе не должен быть выполнен. – NimChimpsky

+0

_ Также у вас есть много логики, чтобы просто добавить один атрибут модели, который сам по себе не должен быть выполнен._ Я оставляю вас сделать очевидный вывод о том, сколько атрибутов * будет добавлено, когда эта вещь сделает все, что она должна. Мы уходим отсюда. Проблема заключается в проблеме ArrayList - серверные журналы молчат об этом. – tacticAl

Смежные вопросы