Spring MVC模型在ArrayList上窒息

时间:2013-02-26 11:49:01

标签: java spring-mvc

我正在实现一个通用的Controller,它处理js / css文件的编程声明,表示为ArrayList,然后将其添加到Model&推出了jsp。

问题是一切都有效,直到我将文件路径添加到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);
}
}

我甚至没有输入任何代码来访问.jsp中的 jsFiles 列表,所以问题在于上面两个文件。只是我填充ArrayList的事实足以打破它。另外:同样的事情发生在LoginController中的所有BaseController代码中,所以不要认为它是继承的一些愚蠢错误。

感激不尽的任何帮助。

2 个答案:

答案 0 :(得分:1)

Annoations不是继承的,所以LoginController不是控制器,你可以从基类继承,但每个子类(每个单独的控制器)都需要注释..

这听起来像是个坏主意

such that it handles programmatic declarations of js/css files

分离您的视图和控制器逻辑 - MVC。在配置文件中声明和映射静态资源。

检查服务器日志(打开日志记录)。

对于基本的异常处理,它听起来像你需要的,你应该考虑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
    }

答案 1 :(得分:0)

解决了......有点儿。代码的操作没有任何问题(暂时忽略了是否按照上面的方式执行js / css的事情。由于JVM,扼流圈实际上是笔记本电脑上的交换文件使用(尽管它花了很多时间)适当的提醒,以实现日志记录,以确定这一点。为您的时间喝彩,为对待红鲱鱼。