前言

在Vaadin技术框架中会出现三种不同的类,用于架构Web应用。它们分别是:Page、UI、View。本文将对这三者从使用角度进行比较,试图分析三者的异同。本文完全原创,我可不是在强调版权,我只是想告诉读者,下面的内容都是我自己的粗浅理解,欢迎各位读者指正、探讨。

本文基于Vaadin 7.7.6撰写,不同Vaadin版本会有细微差异。

Page

API Doc:https://vaadin.com/api/com/vaadin/server/Page.html

Page对象代表当前的浏览器窗口、Tab页,相当于HTML DOM中的window对象。Page的对象的主要功能有:

  • 注册浏览器级监听器(如:窗口事件、URI变更事件等);
  • 获得浏览器窗口信息(如:高度、宽度、状态、样式、语言环境、浏览器信息、窗口信息、标题栏信息等);
  • 设置以上信息;
  • 开启新窗口、修改URI片段、刷新窗口内容等。

UI

API Doc:https://vaadin.com/api/com/vaadin/ui/UI.html

UI对象代表着HTML片段,通常情况下,一个UI将填充整个页面(篇幅、窗口,随便怎么叫,总而言之就是你点了某个链接之后在窗口中看到的内容),当然,也有一个页面包含多个UI的情况(我们在开发HTML页面时也会遇到把一个页面内容嵌到另一个页面中的情况)。从某种意义上讲,UI有点像HTML DOM中的document对象,其实这样说并不确切。UI相当于一个web应用的视口,代表着URL中从context之后的URI。举个例子:如果说Page对应到http://localhost:8080/myvaadinprj,那么,假设我们有一个UI,这个UI的名字是MyUI,那么,对应到URL上就是http://localhost:8080/myvaadinprj/my

看看下面这幅图(从官网的book of vaadin.pdf中截取):

图-1

从这个结构上看,UI像不像HTML里的<body>?

Vaadin推荐我们用single-page的方式来构建web应用,这也是当前的趋势,所以,一般情况下一个由vaadin构建的web应用中只有一个UI。到这里你肯定会有一大堆疑问,别着急,接着往下看。

View

API Doc:https://vaadin.com/api/com/vaadin/navigator/View.html

View是个接口。上面我在介绍UI时说UI像个视口(viewport),那么View就是视口中不断切换的内容(Content)。在Vaadin中,所有UI元素都是由组件(component)构成,你在web页面上看到的所有东西都是component。不同的component组成了content,既然View就是content,那么也可以说View就是component组合出来的。

说到View,那就不能不提一下Navigator。UI、View、Navigator这三者是构建single-paged web application的基础:UI提供视口(viewport),View组织组件(Component)形成内容,Navigator用来在一个UI中切换不同的View。这样一来,就模拟了之前在页面上点击链接进行页面跳转查看不同页面内容的行为方式。

说的口干舌燥不如举个例子。

我在一个web应用程序中有一个UI、两个View(分别是view1、view2),在UI中有一个成员变量Navigator,并将两个View(view1、view2)都注册到Navigator中。view1中有一个按钮,按钮的click动作就是去执行一段代码:Navigator.navigateTo(“view2”)。现在,运行这个web应用,作为默认显示的页面出来了,页面上有一个按钮。此时,你看一下浏览器的地址栏,你应该能看到类似http://localhost:8080/myvaadinprj#view1。这个view1的资源指的就是当前被默认显示出来的view1。现在点击页面上的按钮,click,okay,view2的内容显示出来了,view1的按钮没了。你再看看浏览器地址栏,你会发现URL变成了http://localhost:8080/myvaadinprj#view2。就是这样,View所对应的URL就是#后面的那段字符串。

Okay,至此,Page、UI和View的用途就介绍到这里,欢迎各位读者赐教、指正。

Vaadin学习笔记——Page、UI和View在用法上的区别的更多相关文章

  1. ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则

    ASP.NET MVC 学习笔记-7.自定义配置信息   ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...

  2. 【Ext.Net学习笔记】02:Ext.Net用法概览、Ext.Net MessageBus用法、Ext.Net布局

    Ext.Net用法概览 Ext.Net还是很强大,如果运用熟练可以极大的提高编程效率.如果你也要学习Ext.Net,原文博主推荐书籍:<Ext.Net Web 应用程序开发教程>,是英文的 ...

  3. Ext.Net学习笔记22:Ext.Net Tree 用法详解

    Ext.Net学习笔记22:Ext.Net Tree 用法详解 上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat=&q ...

  4. Ext.Net学习笔记23:Ext.Net TabPanel用法详解

    Ext.Net学习笔记23:Ext.Net TabPanel用法详解 上面的图片中给出了TabPanel的一个效果图,我们来看一下代码: <ext:TabPanel runat="se ...

  5. SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传

    SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传 配置CKEDITOR 精简文件 解压之后可以看到ckeditor/lang下面有很多语言的js,如果不需要那么多种语言的,可 ...

  6. Xamarin 学习笔记 - Page(页面)

    本文翻译自CodeProject文章:https://www.codeproject.com/Articles/1226447/Xamarin-Notes-Xamarin-Forms-Pages 转载 ...

  7. 学习笔记_J2EE_SpringMVC_03_注解配置_@RequestMapping用法

    @RequestMappingde的用法 摘要: 主要介绍注解@RequestMapping的用法 一.@RequestMapping 简介 在Spring MVC 中使用 @RequestMappi ...

  8. Dynamic CRM 2013学习笔记(二)插件基本用法及调试

      插件是可与 Microsoft Dynamics CRM 2013 和 Microsoft Dynamics CRM Online 集成的自定义业务逻辑(代码),用于修改或增加平台的标准行为.也可 ...

  9. Ext.Net学习笔记10:Ext.Net ComboBox用法

    ComboBox是最常用的控件之一,它与HTML中的Select控件很像,但可以进行多选.自定义显示格式.分页等. ComboBox用法 <ext:ComboBox runat="se ...

随机推荐

  1. vux构建的项目打包成app出的一些问题

    1.static里面能放一些外部的插件,css可以放static,引用的时候按照相对路径写, less不可以,因为放在static里面的文件不会经过webpack的处理,所以也就不会编译成css,所以 ...

  2. PIE SDK波谱运算

    1.算法功能简介 波谱运算(Spectral Math)是一种灵活的波谱处理工具,可以用数学表达式或IDL程序对波谱曲线(以及选择的多波段图像)进行处理.波谱曲线可以来自一幅多波段图像的Z剖面.波谱库 ...

  3. Oracle 数据库和Sql Server数据库的区别

    Oracle数据库的访问方式,和SqlServer数据库是有很大差别的,下面用图来说明: 1.Sql Server数据库 SqlServer数据库的访问方式,大致是:假设用户通过sa登录SqlServ ...

  4. 阿里云centos 7 中tomcat 自启动

    这里我的tomcat的安装路径为 /usr/local/tomcat 1 为tomcat添加自启动参数 catalina.sh在执行的时候会调用同级路径下的setenv.sh来设置额外的环境变量,因此 ...

  5. 九度oj题目1181:遍历链表

    题目1181:遍历链表 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2600 解决:1125 题目描述: 建立一个升序链表并遍历输出. 输入: 输入的每个案例中第一行包括1个整数:n(1 ...

  6. js 用简单案例举模态对话框弹出

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. Class.forName和ClassLoader的区别

    一 看名字就知道了,一个是类的创建,一个类加载器 二 再看下Class.forName源码,调用了ClassLoader @CallerSensitive public static Class< ...

  8. jQuery前端数据通用验证库,解放你的双手

    这个简易的验证库,应该能完成90%的基本验证,包括失去焦点时的验证,以及点击提交按钮时的验证.后端的那我就无能为办了,只能是谁用就谁自个儿去写了:). 先上一段调用的代码吧,JS代码说少也不少了,就不 ...

  9. 深入理解JavaScript系列(12):变量对象(Variable Object)

    介绍 JavaScript编程的时候总避免不了声明函数和变量,以成功构建我们的系统,但是解释器是如何并且在什么地方去查找这些函数和变量呢?我们引用这些对象的时候究竟发生了什么? 原始发布:Dmitry ...

  10. s中的闭包

    今天看了关于js闭包方面的文章,还是有些云里雾里,对于一个菜鸟来说,学习闭包确实有一定的难度,不说别的,能够在网上找到一篇优秀的是那样的不易. 当然之所以闭包难理解,个人觉得是基础知识掌握的不牢,因为 ...