2016-04-14 10 views
1

私はSpring MCV 4 + HTML5 + Thymeleafベースのアプリケーションを持っています。私はページ上でjavascriptを使用することはできません。Thymeleaf + HTML5 - なぜJavaScriptにアクセスできないのですか?

Webアプリケーションの構造は次のとおりです。私のログインページで

webapp 
    assets 
     css 
     img 
     js 
    i18n 
     messages.properties 
    WEB-INF 
     html 
      fragments 
       common.html 
       default.html 
       footer.html 
       header.html 
       login.html // exclusively for ../login.html 
       sidebar.html 
      home 
       welcomeSignedIn.html 
      client 
       home.html 
       create.html 

、それがバックグラウンドで画像のみで、単一ページであるため、私は完璧に動作JSの部分を持っている:

<!DOCTYPE html> 

<html xmlns:th="http://www.thymeleaf.org"> 
<head th:include="fragments/login :: loginFragment"> 
<meta charset="UTF-8" /> 
<title><th:text="#{app.name}"></label></th:text> 
</head> 
<body> 
<div class="login-container animated fadeInDown"> 
    <div class="loginbox bg-white"> 
     <form th:action="@{/login}" method="post"> 
      <div class="loginbox-title">SIGN IN</div> 

      <div class="loginbox-textbox"> 
       <input type="text" id="ssoId" name="ssoId" class="form-control" placeholder="Username" /> 
      </div> 
      <div class="loginbox-textbox"> 
       <input type="password" id="password" name="password" class="form-control" placeholder="Password" /> 
      </div> 
      <div class="loginbox-forgot"> 
       <a href="">Forgot Password?</a> 
      </div> 
      <div class="loginbox-submit"> 
       <input type="submit" class="btn btn-primary btn-block" value="Login"/> 
      </div> 
     </form> 
    </div> 
</div> 

<script type="text/javascript"> 
    $(function() { 
     $('#ssoId').focus(); 
    }); 
    </script> 
</body> 
</html> 

ログインページには、メニューはなく、サイドバーページがないため、独自のフラグメントがあります。他のすべてです。

デフォルトのテンプレート設定の場合、ページ構成の責任を負うfragments/default.htmlというファイルがあります。

<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"> 

<head th:include="fragments/common :: commonFragment"> 
<meta charset="UTF-8" /> 
<title th:text="#{app.name}"> </title> 
</head> 
<body> 
    <div th:id="defaultFragment" th:fragment="defaultFragment"> 
     <div th:replace="fragments/header :: headerFragment"></div> 
      <div class="main-container container-fluid"> 
       <div class="page-container"> 
       <div th:replace="fragments/sidebar :: sidebarFragment"></div> 
       <div class="page-content"> 
        <div class="page-body"> 
         <div layout:fragment="content"></div> 
        </div> 
       </div> 
      </div> 
     </div> 
     <div th:replace="fragments/footer :: footerFragment"></div> 
    </div> 
</body> 
</html> 

だから、すべてのページのために、私はfragments/common.htmlから以下のリンクとスクリプトが含まれます:

<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org"> 

<head th:id="commonFragment" th:fragment="commonFragment"> 
    <link rel="icon" th:href="@{/assets/img/favicon.png}" type="image/x-icon" /> 

    <link rel="stylesheet" th:href="@{/assets/css/bootstrap.min.css}" /> 
    <link rel="stylesheet" th:href="@{/assets/css/font-awesome.min.css}"/> 
    <link rel="stylesheet" th:href="@{/assets/css/beyond.min.css}"/> 
    <link rel="stylesheet" th:href="@{/assets/css/demo.min.css}" /> 
    <link rel="stylesheet" th:href="@{/assets/css/animate.min.css}" /> 
    <link rel="stylesheet" th:href="@{/assets/css/skins/darkred.min.css}" /> 

    <link rel="stylesheet" th:href="@{http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,400,600,700,300}" /> 


    <!--Skin Script: Place this script in head to load scripts for skins and rtl support--> 
    <script type="text/javascript" src="/assets/js/skins.min.js" th:src="@{/assets/js/skins.min.js}"></script> 

    <script type="text/javascript" src="/assets/js/jquery-2.0.3.min.js" th:src="@{/assets/js/jquery-2.0.3.min.js}"></script> 
    <script type="text/javascript" src="/assets/js/bootstrap.min.js" th:src="@{/assets/js/bootstrap.min.js}"></script> 
    <script type="text/javascript" src="/assets/js/slimscroll/jquery.slimscroll.min.js" th:src="@{/assets/js/slimscroll/jquery.slimscroll.min.js}"></script> 
    <script type="text/javascript" src="/assets/js/beyond.js" th:src="@{/assets/js/beyond.js}"></script> 
    <script type="text/javascript" src="/assets/js/beyond.min.js" th:src="@{/assets/js/beyond.min.js}"></script> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script> 
</head> 
<body> 
    <div class="container" /> 
</body> 
</html> 

マイfragments/header.htmlは次のように定義されます

<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org"> 

<head th:include="fragments/common :: commonFragment"> 
</head> 
<body> 
    <div th:id="headerFragment" th:fragment="headerFragment"> 
     // content 
    </div> 
</body> 
</html> 

fragments/sidebar.htmlは非常によく似ています`fragments/header.html、ちょうど異なるクラスと内容。

だから、私は自分のアプリケーションに持っているすべてのページに、私はこのような何かを:

<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorator="fragments/default" xmlns:s="http://www.springframework.org/tags"> 

<head > 
<title th:text="#{view.index.title}">Welcome!</title> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
</head> 

<body> 
    <div layout:fragment="content"> 
     // content 
    </div> 
</body 
</html> 

私はそれが非常に愚かなものだと確信していますが、私は、私は得ることができない理由を確認するために失敗していますjavascriptのもかなりのような単純なもののために、私のページに取り組んで:(!多くのことを)何を悩ま、

<script type="javascript" > 
    $(function() { 
     alert('hello'); 
    }); 
</script> 

されているかのようなブラウザ何かのI:

localhost:8080/appName/assets/js/bootstrap.min.js 

ファイルの内容が表示されます。

私はここで何が欠けていますか?私は2つのjqueryファイルがあるので、あなたが問題を持っていると思う

+0

CSSがロードされています。また、ファビコンもあります。 – gtludwig

+1

ブラウザコンソールには何が表示されますか? jsリソースの404を報告していますか? – ndrone

+0

@ndrone、入力いただきありがとうございます!ブラウザコンソールには何も印刷されません。 – gtludwig

答えて

2

入力いただきありがとうございます!私はそれを働かせた。私がしたことは、例のように<div layout:fragment="content">*HERE*</script>エリアにJavaScriptセクションを配置することです。

<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorator="fragments/default" xmlns:s="http://www.springframework.org/tags"> 

<head > 
<title th:text="#{view.index.title}">Welcome!</title> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
</head> 

<body> 
    <div layout:fragment="content"> 
     <script type="text/javascript" > 
      *JavaScript area* 
     </script> 
     // content 
    </div> 
</body 
</html> 

希望すると、誰かの貴重な時間を節約できます。

+1

良い夜が眠った後、それは意味をなさない。あなたが知っているように、Thymeleafはサーバー側レンダリングエンジンです。だから、あなたはそれがすべてである体の断片をレンダリングするように言っています。それは、その断片のためにヘッドタグから必要なものを見るために戻っていません。 – ndrone

+0

それは本当に意味があります! – gtludwig

+0

@gtludwigありがとう、それは私のための仕事だ –

1

は(Firebugのを介して、またはそのような何か、それを確認してください)あなたのfragments/common.htmlに含ま:

<head th:id="commonFragment" th:fragment="commonFragment"> 
     ... 
    <script type="text/javascript" src="/assets/js/jquery-2.0.3.min.js" th:src="@{/assets/js/jquery-2.0.3.min.js}"></script> 
     ... 
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script> 
</head> 

は定義の一つを削除するようにしてください。

+0

入力いただきありがとうございます!しかし、あなたの提案は何もしません。とにかく、私はそれを修正した。問題は '