gwt中java与js的相互调用
1. java通过jsni调用内部js
- Button button = new Button("java调用内部jsni的js方法");
- button.addClickHandler(new ClickHandler() {
- @Override
- public void onClick(ClickEvent event) {
- //gwt中java调用js方法
- execute("js方法被调用");
- }
- });
- /**
- * JSNI方法
- * @param id
- */
- public static native void execute(String str) /*-{
- alert(str);
- }-*/;
2. 内部js通过jsni调用java方法
- Button button1 = new Button("内部jsni的js调用java方法");
- button1.addClickHandler(new ClickHandler() {
- @Override
- public void onClick(ClickEvent event) {
- //gwt中java调用js方法
- executeJs("java方法被调用");
- }
- });
- /**
- * JSNI方法, 里面调用java方法 javaAlert
- * @param id
- */
- public static native void executeJs(String str) /*-{
- @com.hw.client.TestCall::javaAlert(Ljava/lang/String;)(str);
- }-*/;
3.gwt中java方法调用外部js
在gwt工程的index.html中加入外部方法
- <mce:script language="JavaScript"><!--
- function callOutJs(str){
- alert('此处是外部js方法:'+ str);
- }
- // --></mce:script>
然后在onModuleLoad中java方法进行调用
- Button button2 = new Button("JAVA调用外部js");
- button2.addClickHandler(new ClickHandler() {
- @Override
- public void onClick(ClickEvent event) {
- //gwt中java调用js方法
- callOutJS("外部js被调用");
- }
- });
- /**
- * JSNI方法 调用外部js方法
- * @param id
- */
- public static native void callOutJS(String str) /*-{
- $wnd.callOutJs(str);
- }-*/;
4. 外部js调用gwt的java方法
在onModuleLoad方法中调用 outJsCallGwt();
outJsCallGwt方法为
- /**
- * 需要被调用的js方法
- * @param id
- */
- private static native void outJsCallGwt() /*-{
- $wnd.outJsCallGwt = function (str) {
- alert("此处是gwt:"+ str);
- };
- }-*/;
在index.html中加入按钮以调用
- <button onclick="outJsCallGwt('外部按钮被点击')">点击</button>
现贴出application和index.html代码
- package com.hw.client;
- import com.google.gwt.core.client.EntryPoint;
- import com.google.gwt.event.dom.client.ClickEvent;
- import com.google.gwt.event.dom.client.ClickHandler;
- import com.google.gwt.user.client.Window;
- import com.google.gwt.user.client.ui.Button;
- import com.google.gwt.user.client.ui.RootPanel;
- public class TestCall implements EntryPoint {
- public void onModuleLoad() {
- Button button = new Button("java调用内部jsni的js方法");
- button.addClickHandler(new ClickHandler() {
- @Override
- public void onClick(ClickEvent event) {
- //gwt中java调用js方法
- execute("js方法被调用");
- }
- });
- Button button1 = new Button("内部jsni的js调用java方法");
- button1.addClickHandler(new ClickHandler() {
- @Override
- public void onClick(ClickEvent event) {
- //gwt中java调用js方法
- executeJs("java方法被调用");
- }
- });
- Button button2 = new Button("JAVA调用外部js");
- button2.addClickHandler(new ClickHandler() {
- @Override
- public void onClick(ClickEvent event) {
- //gwt中java调用js方法
- callOutJS("外部js被调用");
- }
- });
- RootPanel.get().add(button);
- RootPanel.get().add(button1);
- RootPanel.get().add(button2);
- outJsCallGwt();
- }
- /**
- * JSNI方法 调用外部js方法
- * @param id
- */
- public static native void callOutJS(String str) /*-{
- $wnd.callOutJs(str);
- }-*/;
- /**
- * JSNI方法
- * @param id
- */
- public static native void execute(String str) /*-{
- alert(str);
- }-*/;
- /**
- * JSNI方法, 里面调用java方法 javaAlert
- * @param id
- */
- public static native void executeJs(String str) /*-{
- @com.hw.client.TestCall::javaAlert(Ljava/lang/String;)(str);
- }-*/;
- /**
- * 被js方法调用
- * @param id
- */
- public static void javaAlert(String str){
- Window.alert(str);
- }
- /**
- * 需要被调用的js方法
- * @param id
- */
- private static native void outJsCallGwt() /*-{
- $wnd.outJsCallGwt = function (str) {
- alert("此处是gwt:"+ str);
- };
- }-*/;
- }
- <!doctype html>
- <html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=UTF-8">
- <link type="text/css" rel="stylesheet" href="TestCall.css" mce_href="TestCall.css">
- <title>Web Application Starter Project</title>
- <mce:script language=JavaScript><!--
- function callOutJs(str){
- alert('此处是外部js方法:'+ str);
- }
- // --></mce:script>
- <mce:script type="text/javascript" language="javascript" src="testcall/testcall.nocache.js" mce_src="testcall/testcall.nocache.js"></mce:script>
- </head>
- <body>
- <!-- OPTIONAL: include this if you want history support -->
- <iframe src="javascript:''" mce_src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>
- <!-- RECOMMENDED if your web app will not function without JavaScript enabled -->
- <noscript>
- <div style="width: 22em; position: absolute; left: 50%; margin-left: -11em; color: red; background-color: white; border: 1px solid red; padding: 4px; font-family: sans-serif">
- Your web browser must have JavaScript enabled
- in order for this application to display correctly.
- </div>
- </noscript>
- <h1>Web Application Starter Project</h1>
- <table align="center">
- <tr>
- <td colspan="2" style="font-weight:bold;" mce_style="font-weight:bold;">Please enter your name:</td>
- </tr>
- <tr>
- <button onclick="outJsCallGwt('外部按钮被点击')">点击</button>
- <td id="nameFieldContainer"></td>
- <td id="sendButtonContainer"></td>
- </tr>
- <tr>
- <td colspan="2" style="color:red;" mce_style="color:red;" id="errorLabelContainer"></td>
- </tr>
- </table>
- </body>
- </html>
备注: 以上html代码中<mce:script 应该为<script 由于csdn代码编辑器自动改变了值
- <script language=JavaScript>
- function callOutJs(str){
- alert('此处是外部js方法:'+ str);
- }
- <script>
gwt中java与js的相互调用的更多相关文章
- Unity3D中C#和js方法相互调用
通过查找资料,Unity3D中C#和js要相互调用彼此的方法,js文件必须放在"Standard Assets". "Pro Standard Assets" ...
- Hybrid App开发模式中, IOS/Android 和 JavaScript相互调用方式
IOS:Objective-C 和 JavaScript 的相互调用 iOS7以前,iOS SDK 并没有原生提供 js 调用 native 代码的 API.但是 UIWebView 的一个 dele ...
- .Net 与 Java 的服务接口相互调用
本文介绍.Net 与 Java 相互调用的例子.下面的介绍主要包括三方面:一是通过常用Web服务进行相互调用,二是使用TCP/IP套接字进行相互调用,三是使用Remote实现远程对象相互调用. 首先说 ...
- JAVA与.NET的相互调用——通过Web服务实现相互调用
JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有很多相似的地方.而在很多大型的开发项目里面,往往需要使用两种语言进行集成开发.而很多的开发人员都会偏向于其中一种语言,在使用集成开发的时候 ...
- JAVA与.NET的相互调用——利用JNBridge桥接模式实现远程通讯
分布式开发的历史 利用Remote方式调用远程对象实现服务器与客户端之间通讯是一种常用的网络开发方式,在.NET与JAVA开发当中,对Remote远程对象早已有着足够的支持(对Remote远程对象调用 ...
- 转载 OS js oc相互调用(JavaScriptCore) ---js调用iOS ---js里面直接调用方法
OS js oc相互调用(JavaScriptCore) 接着上节我们讲到的iOS调用js 下来我们使用js调用iOS js调用iOS分两种情况 一,js里面直接调用方法 二,js里面通过对象调用 ...
- 安卓中java和js如何交互
1.安卓中java和js如何交互 在Android上怎样实现JAVA和JS交互呢?Android的webview是基于webkit内核的,webview中集成了js与java互调的接口函数,通过add ...
- 转载 iOS js oc相互调用(JavaScriptCore) --iOS调用js
iOS js oc相互调用(JavaScriptCore) 从iOS7开始 苹果公布了JavaScriptCore.framework 它使得JS与OC的交互更加方便了. 下面我们就简单了解一下这 ...
- knockout中viewmodel跟子model相互调用
用knockout写前端复杂js逻辑的确很方便,而且html界面也很清爽. 在ko中对于复杂的业务逻辑我会给viewmodel创建一些子model对象,但是viewmodel跟子model怎样相互调用 ...
随机推荐
- linux服务器监控流量sh脚本
服务器可能经常遇到服务器出带宽跑满,不知如何查询被哪个进程占用的情况,有一款开源的英文软件iftop功能比较强大可以查询相关信息,可能刚接触linux系统的朋友不太会使用,在此写了一个功能比较简单无需 ...
- 【转】mybatis在xml文件中处理大于号小于号的方法
http://blog.csdn.net/zheng0518/article/details/10449549 第一种方法: 用了转义字符把>和<替换掉,然后就没有问题了. SELECT ...
- C与OC、C++的区别
C语言的特点:1)C语言是结构化语言,层次清晰,调试和维护比较容易2)表现能力和处理能力比较强,可直接访问内存的物理地址3)c语言实现对硬件的编辑,c语言课用语系统软件的开发,也可用语应用软件的开发, ...
- Sprint5
进展:今天开始进行了登录界面的编写及实现. 燃尽图: 工作照:
- 模拟google分页效果
/// </summary> /// <param name="total">总记录数</param> /// <param name=& ...
- /etc/passwd 与 /etc/shadow
/etc/passwd是用户数据库,其中的域给出了用户名.加密口令和用户的其他信息. /etc/shadow是在安装了影子(shadow)口令软件的系统上的影子口令文件.影子口令文件将/etc/pas ...
- hdu 4749
题目很简单,不过题意很难看懂. 就是给一个标准的大小关系的队列,从原队列中找出最多的匹配子队列,感觉就像一个KMP算法+贪心: 不过这个题可能数据有点水把,竟然只要判断相邻的关系就可以A掉: 代码: ...
- [wikioi]奇怪的梦境
http://wikioi.com/problem/2833/ 拓扑排序,居然1A,哈哈. #include <cstdio> #include <iostream> #inc ...
- 详解如何用AD 生成Gerber文件
以上gerber文件就出完了; 下面步骤是:进行导出" 钻孔文件 ". 以上钻孔文件就出完了; 到此就全部完成输出了. 下面的操作,也可以不用导的 .下面步骤是:进行导出&qu ...
- 【Xamarin挖墙脚系列:mac 终端 常用命令+Mac OS X的快捷键+beamoff 】
原文:[Xamarin挖墙脚系列:mac 终端 常用命令+Mac OS X的快捷键+beamoff ] 基本命令 1.列出文件 ls 参数 目录名 例: 看看驱动目录下有什么:ls /S ...