我创建了一个Vaadin项目,并使用JSNI编写脚本。但是当执行到达JSNI脚本时,它会显示一个错误。
java.lang.UnsatisfiedLinkError: com.yty.cws.CiwsUI.jsniDemo()V
at com.yty.cws.CiwsUI.jsniDemo(Native Method) ~[classes/:na]
at com.yty.cws.CiwsUI.lambda$0(CwsUI.java:31) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_92]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_92]下面是我的示例代码。
public class CiwsUI extends UI{
private static final long serialVersionUID = 5275145103992848572L;
VerticalLayout mainLayout=new VerticalLayout();
private TextField txtName=new TextField();
private Button btnJSNI=new Button("JSNI");
@Override
protected void init(VaadinRequest request) {
mainLayout.addComponents(txtName,btnJSNI);
setContent(mainLayout);
mainLayout.setComponentAlignment(txtName, Alignment.MIDDLE_CENTER);
mainLayout.setComponentAlignment(btnJSNI, Alignment.MIDDLE_CENTER);
btnJSNI.addClickListener(e->{
System.out.println("Clicked");
jsniDemo();
});
}
private native void jsniDemo()/*-{
$wnd.alert("Hai JSNI");
}-*/;
}任何帮助都是非常感谢的。
发布于 2016-07-21 08:47:42
如果您查看GWT与Vaadin的差异,您会注意到,除了客户端API之外,Vaadin还有一个服务器端API,您发布的代码也属于这个类别。搜索Vaadin论坛,我发现了这个问题与您的确切问题。以下是瓦丁开发团队的亨利·萨拉的回复:
JSNI只在客户端小部件中可用,而在服务器端使用。 使用Window.executeJavaScript(“……”)(Vaadin 6)或Root.executeJavaScript(“……”)(Vaadin 7)如果您需要从服务器端应用程序执行JavaScript。
虽然情况可能已经发生了变化,因为答案和Root.executeJavaScript("...");现在很可能是JavaScript.getCurrent().execute(...)");,但是Vaadin提供了关于与服务器端的javascript交互和js组件和扩展的信息,而且还可以查看维基以获得更多的示例。
https://stackoverflow.com/questions/38497421
复制相似问题