我正在实现一个通用的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代码中,所以不要认为它是继承的一些愚蠢错误。
感激不尽的任何帮助。
答案 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,扼流圈实际上是笔记本电脑上的交换文件使用(尽管它花了很多时间)适当的提醒,以实现日志记录,以确定这一点。为您的时间喝彩,为对待红鲱鱼。