我正在实现一个通用控制器,以便它处理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代码都会发生相同的事情,因此不要认为继承是一些愚蠢的错误。

非常感谢任何帮助。

最佳答案

注释不继承,因此LoginController不是控制器,您可以从基类继承,但是需要对每个子类(每个单独的控制器)进行注释。

也听起来像个坏主意

such that it handles programmatic declarations of js/css files


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

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

对于基本的异常处理(听起来您很需要),您应该考虑将abotu添加到这样的基本控制器中

 @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
    }

09-08 09:02