0

我正在实现一个通用控制器,以便它处理 js/css 文件的编程声明,表示为一个 ArrayList,然后将其添加到模型中并推送到 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 代码都会发生同样的事情,所以不要认为继承是一些愚蠢的错误。

感激地收到任何帮助。

4

2 回答 2

1

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

这听起来也很糟糕

such that it handles programmatic declarations of js/css files

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

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

对于听起来像你需要的基本异常处理,你应该考虑将这样的东西添加到你的 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
    }
于 2013-02-26T11:52:27.030 回答
0

解决了……有点。代码的操作本身没有问题(暂时忽略是否像上面那样做 js/css 的问题。由于 JVM,阻塞实际上是笔记本电脑上的交换文件使用(尽管它花了你很多时间)适当提醒实施日志记录以解决此问题)。为您的时间喝彩,为红鲱鱼感到抱歉。A

于 2013-02-26T15:51:08.723 回答