0

私は、モデルに追加され、jsp にプッシュされる ArrayList として表現される js/css ファイルのプログラム宣言を処理するように、汎用コントローラーを実装しています。

問題は、ファイルパスを 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 Listにアクセスするためのコードを何も入れていないので、問題は上記の 2 つのファイルにあります。ArrayList に値を設定するという事実だけで、それを壊すのに十分です。また、同じことが LoginController のすべての BaseController コードで発生するため、継承に関するばかげたエラーだとは思わないでください。

感謝して受け取った助け。

4

2 に答える 2

1

アノテーションは継承されないため、LoginController はコントローラーではありません。基本クラスから継承できますが、各サブクラス (個々のコントローラー) にアノテーションを付ける必要があります。

また、これは非常に悪い考えのように聞こえます

such that it handles programmatic declarations of js/css files

ビューとコントローラーのロジックを分離します - MVC。構成ファイルで静的リソースを宣言してマップします。

サーバーのログを確認します (ログをオンにします)。

基本的な例外処理が必要だと思われる場合は、このようなものをベースコントローラーに追加することを検討する必要があります。

 @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 のおかげでラップトップでスワップファイルを使用することでした (ただし、非常に手間がかかりました)それを理解するためにロギングを実装するための適切なリマインダー) お時間をいただきありがとうございます。

于 2013-02-26T15:51:08.723 に答える