javascript - Vaadin7 jQuery UI 集成

标签 javascript jquery jquery-ui vaadin vaadin7

Vaadin 7 支持自定义 javascript。但我的问题是,如果我们想将jQuery-ui 与vaadin7 集成,我们如何添加jQuery-ui css 文件。目前@Javascript 仅支持添加 javascript。如果我们想添加 css,我们将其添加为 sass 样式。

最佳答案

要将 jQuery(或任何其他 javascript 库)添加到 Vaadin 7 应用程序,请按照以下简单步骤操作:

首先使用您最喜欢的 IDE 或 vaadin maven 原型(prototype)(或两者)创建一个 Vaadin 项目。创建一个从 VaadinServlet 扩展的新类,并覆盖 servletInitialized 方法:

import javax.servlet.ServletException;

import com.vaadin.server.BootstrapFragmentResponse;
import com.vaadin.server.BootstrapListener;
import com.vaadin.server.BootstrapPageResponse;
import com.vaadin.server.ServiceException;
import com.vaadin.server.SessionInitEvent;
import com.vaadin.server.SessionInitListener;
import com.vaadin.server.VaadinServlet;

public class TestJqueryVaadinServlet extends VaadinServlet {
   @Override
   protected void servletInitialized() throws ServletException {
      super.servletInitialized();
      getService().addSessionInitListener(new SessionInitListener() {
         @Override
         public void sessionInit(SessionInitEvent event) throws ServiceException {
            event.getSession().addBootstrapListener(new BootstrapListener() {
               @Override
               public void modifyBootstrapPage(BootstrapPageResponse response) {
                  // With this code, Vaadin servlet will add the line:
                  //
                  // <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" />
                  //
                  // as the first line inside the document's head tag in the generated html document
                  response.getDocument().head().prependElement("script").attr("type", "text/javascript").attr("src", "//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js");
               }

               @Override
               public void modifyBootstrapFragment(BootstrapFragmentResponse response) {}
            });
         }
      });
   }
}

然后在您的 web.xml 中添加对 servlet 的引用或使用 @WebServlet 注释对类进行注释。

然后创建您的 jQuery 片段并使用 JavaScript 类调用它,例如:

public class MyVaadinUI extends UI {
   @Override
   protected void init(VaadinRequest request) {
      final VerticalLayout layout = new VerticalLayout();
      layout.setMargin(true);
      setContent(layout);

      Label label = new Label("This will fade-out once you click the button");

      Button button = new Button("Hide Label");
      button.addClickListener(new Button.ClickListener() {
         public void buttonClick(ClickEvent event) {
            JavaScript.getCurrent().execute("$('.v-label').animate({opacity: 0.0}, 3000);");
         }
      });
      layout.addComponent(label);
      layout.addComponent(button);
   }
} 

现在可以通过将@StyleSheet 或@JavaScript 注释添加到组件或扩展类来将样式表或JavaScript 文件包含在您的加载项中或作为应用程序的一部分。在框架初始化客户端组件或扩展之前,每个注释都包含一个字符串列表,其中包含指向应在页面上加载的资源的 URL。

URL 可以是完整的绝对 URL(例如“https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js”)或相对 URL(例如“redbutton.css”)。相对 URL 转换为特殊 URL,它将从定义类所在的 Java 包下载文件。这意味着例如com.example.RedButton 类上的@StyleSheet({"redbutton.css"}) 将导致类路径上的文件 com/example/redbutton.css 加载到浏览器中。 @JavaScript 以完全相同的方式工作

#!java
@StyleSheet("redbutton.css")
public class RedButton extends NativeButton {
    public RedButton(String caption) {
        super(caption);
        addStyleName("redButton");
    }
}

在这个简单的例子中,RedButton 组件只是添加了一个

redButton

样式名改为普通

NativeButton

. redbutton.css 位于与 RedButton.java 相同的文件夹中并具有以下内容:

#!css
.redButton {
    background-color: red;
}

这种新机制使得在加载项中包含样式表或 JavaScript 文件变得非常容易,并在使用加载项时自动将它们加载到浏览器中。

第二种也是我最喜欢的方式:

您还可以使用@Stylesheet 和@Javascript 注释。它更简单。

@StyleSheet({
/*
* JQuery UI
*/
"vaadin://jquery/jquery-ui-1.9.2.custom/css/ui-darkness/jquery-ui-1.9.2.custom.min.css",
})

@JavaScript({ 
/*
* JQuery
*/
"vaadin://jquery/jquery-1.11.1.min.js",

/*
* JQuery UI 
*/
"vaadin://jquery/jquery-ui-1.9.2.custom/js/jquery-ui-1.9.2.custom.min.js",
})

public class MyUI extends UI {
...
}

关于javascript - Vaadin7 jQuery UI 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27857487/

相关文章:

javascript - 从对象中过滤字符串和空值

javascript - 如何重命名 Bootstrap 表的列?

javascript - jQuery 绘制和修改线条和位置

c# - MVC 网络 API,错误 : Can't bind multiple parameters

jquery-ui - Grails 2.4 包含 jquery-ui

Javascript/Json转换数据格式

javascript - 压缩 Jquery 更干净

javascript - 看似有效的 JSON 上的 JSON.parse 错误

javascript - 如何将 Jquery UI 从图像中的单击委托(delegate)给列表项?

javascript - 如何手动将值(并触发选择事件)设置为 jQuery 自动完成