0

これは a.jsp で記述されたコードです。

    <script type="text/javascript" >
    function chk(d,e)
    {
     var x = d.split('/')
     var y = e.split('/')
     var a = new Date(x[2],x[0],x[1])
     var b = new Date(y[2],y[0],y[1])
     var c = ( b - a )
     var p= c / (1000 * 60 * 60 * 24);
    }
    </script>

    <% String b="2013/07/12";
       String c="2013/07/14";%>

   <script>
    var myVar=chk('$b','$c');
   </script>

   <body>
   <% String st="<script>document.writeln(myVar)</script>";
       out.println("value="+st); %>
   </body>

これら 2 つの日付 (つまり 'b' と 'c') の間の日数 (つまり 'p') を出力として取得したいと考えています。しかし、私が得ている出力は「値= NaN」です。このコードの何が問題になっていますか? 助けてください。

4

3 に答える 3

1

この質問は答えるのが難しかったです。まず、スクリプトレットで宣言された変数を EL を使用して JavaScript に渡したいようです。これを達成するには、次のことを行う必要があります。

  • ここで説明されているように、スクリプトレットの変数を pageContext 属性またはリクエスト属性として設定します: How to evaluate a scriptlet variable in EL?
  • JSTL<c:out>を使用して、変数を EL から JavaScript 関数に送信します。
  • GauravSharma の回答の提案に従ってreturn p;、JavaScript 関数の最後に a を追加します。

コードは次のようになります (少なくとも Tomcat 7 を使用して動作し、ナビゲーターに 2 が出力されます)。

<script type="text/javascript">
    function chk(d, e) {
        var x = d.split('/');
        var y = e.split('/');
        var a = new Date(x[0], x[1] - 1, x[2]);
        var b = new Date(y[0], y[1] - 1, y[2]);
        var c = (b - a);
        var p = c / (1000 * 60 * 60 * 24);
        return p;
    }
</script>
<%
    String b = "2013/07/12";
    String c = "2013/07/14";
    pageContext.setAttribute("b", b);
    pageContext.setAttribute("c", c);
%>

<script>
    var myVar = chk('<c:out value="${b}" />', '<c:out value="${c}" />');
</script>

<body>
    <%
        String st = "<script>document.writeln(myVar)</script>";
        out.println("value=" + st);
    %>
</body>

あなたの質問に対する私のコメントで述べたように、これはスクリプトレット、EL、JSTL、および JavaScript の統合について練習するための演習のように見えます。この種のコードは、実際の運用システムで使用することを意図したものではありません。スクリプトレットの使用は長い間推奨されていません。参照: JSP ファイルで Java コードを回避するには? . また、これを教師、教授、または Java Web 開発について教えている人に見せてください。

于 2013-07-12T17:49:28.457 に答える