在JavaScript函数中调用Java

时间:2011-07-15 16:43:35

标签: javascript

请告诉我是否可以在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>

8 个答案:

答案 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);看看这里:

http://www.apl.jhu.edu/~hall/java/Java-from-JavaScript.html

答案 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); 
    %>