我正在实现一个通用控制器,以便它处理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
}