请告诉我是否可以在javascript函数中调用java?
<HTML><HEAD></HEAD><BODY>
<SCRIPT>
function getScreenDimension() {
<% System.out.println("Hiiiiiiiii"); %>
}
</SCRIPT>
<FORM>
<INPUT type="button" value="call Java method direct" onClick = "getScreenDimension()">
</FORM>
</BODY></HTML>
答案 0 :(得分:6)
虽然根据问题的措辞,“否”的答案在技术上是正确的。您可能想要阅读AJAX。这是javascript向后端代码发出请求的一种方式(在本例中为Java)。
Javascript是客户端,意味着它由用户的浏览器运行。 Java正在您的服务器上运行。为了使客户端javascript与后端Java交互,您需要向服务器发出请求。
答案 1 :(得分:2)
我的问题是,“你想做什么,你期望看到什么?”。
您必须意识到有两种不同的执行上下文。第一个是JSP本身,其代码由服务器端的JVM执行,第二个是浏览器执行的Javascript。 因此,当代码进入浏览器时,您会看到:因此System.out.println
将导致Hiiiiiiiii
打印到服务器日志,但您将看不到任何内容在浏览器上。实际上,浏览器上的Javascript代码如下所示:
function getScreenDimension() {
}
哪个是无效的Javascript代码。 JSP中的代码在Javascript在浏览器上运行之前运行。因此,要“运行”Java代码,您需要通过发布表单或使用AJAX调用向服务器发出请求。这将导致相应的servlet或控制器中的Java代码运行。
<强>更新强>
看了一下你的代码之后,你似乎想要直接调用Java方法。您当前的代码无法做到这一点。您可能想要阅读AJAX。这将指出你正确的方向。
答案 2 :(得分:2)
JSP在服务器上运行。它生成服务器发送到浏览器的文档。这是JSP参与过程的结束。然后浏览器解析文档并运行任何JS。
您可以在脚本元素中包含JSP,它只需要输出有效的JavaScript。
您不能拥有响应JavaScript而运行的JSP,然后当JavaScript导致浏览器发出新的HTTP请求时(设置location.href
,提交表单,添加图片) ,或使用Ajax等)
答案 3 :(得分:1)
是的,你可以。使用JSP表达式<%= %>
。例如:
<aui:script use="aui-datepicker">
AUI().use('aui-datepicker', function(A) {
new A.DatePickerSelect({
calendar : {
dates : [ '<%="1/1/1970" %>' ],
}
}).render('#myDatePicker');
});
</aui:script>
答案 4 :(得分:0)
我认为你对这里发生的事情缺乏了解。首次请求页面时,将执行<% %>
中间的任何内容。浏览器调用javascript中的任何内容都会执行。您拥有的将永远不会发生,并且无法实现这一目标。但是,您可以使用AJAX来执行之类的操作,但这是一个不同的问题。
答案 5 :(得分:0)
是的,如果您指的是服务器上和客户端上的Java-VM,您可以从Javascript调用Java;我假设你的意思是客户端(浏览器中的VM);看看这里:
答案 6 :(得分:0)
你可以。在JSF中,您可以使用PrimeFaces&#39;组件 p:remoteCommand ,它将包含操作方法。通过JS中的名称调用remoteCommand,java方法将被执行。
JSF页面
<p:remoteCommand name='rmt' action="#{bean.doWork()}"/>
在JavaScript中
function callJava {rmt();}
答案 7 :(得分:-2)
使用JSP代码
<%
// Respond to the application with 1) result, 2) update, and 3) updateid values
String result = "blablabla";
out.print(result);
%>