这是用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>
我想得到这两个日期(即'b'和'c')之间的天数(即'p')作为输出。但我得到的输出是“值= NaN”。这段代码有什么问题?请帮忙。
答案 0 :(得分:1)
回答这个问题很棘手。首先,看起来您希望使用EL将在scriptlet中声明的变量传递给JavaScript。要做到这一点,你应该:
<c:out>
将变量从EL发送到您的JavaScript函数。return p;
。您的代码应该如下所示(至少适用于我使用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>
正如我在你的问题评论中所说,这看起来像是练习scriptlets,EL,JSTL和JavaScript集成的练习。 此类代码不适用于现场制作系统。长时间以来不鼓励使用Scriptlet。请参阅:How to avoid Java code in JSP files?。此外,向您的老师,教授或任何教您Java Web开发的人展示。
答案 1 :(得分:0)
在功能结束时,添加return p;
你的函数没有返回任何为什么undefined
写在屏幕上的原因。
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);
return p;
}
答案 2 :(得分:-1)
只需打电话给这个
var myVar=chk('$b','$c');
准备好文件。
因为JSP
刚刚将script
写入document
。尚未执行。