首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

编写跨浏览器的 XForms(1)

编写跨浏览器的 XForms(1)

简介XForms 的目的是嵌入到其他标记语言中。应用最广,同时也是本文主要讨论的,是用在 XHTML 中。为保证在不同的浏览器上获得流畅的体验,比如 Microsoft® 的 Internet Explorer、Mozilla 的 Firefox、X-Smiles 和 Opera 等,XHTML 文档必须遵循一定的规则。撰写本文的时候,只有一种桌面浏览器为 XForms 提供原生支持,即 X-Smiles。因此,浏览器需要一个增件(add-on),或者有时候叫做插件,来处理 XForms 内容。还有一些方法将 XForms 标记转换成现有浏览器广泛支持的 ECMAScript 和 HTML。更多信息请参阅 。
尽管本文希望提供一种适用各种不同配置的解决方案,但是具体的情况和配置各不相同,难以完全覆盖。随着新版本的浏览器和 XForms 处理程序的发布,以及对标准支持程度的变化,本文所述的解决方案可能不再适用。应对这种情况的方法是通过某种方式将变化隔离起来,以将变化局部化。
什么是 XForms?W3C 针对表单数据的表示和采集提出了 XForms 标准。如 W3C Recommendation 中所述,XForms 的目的是成为 “下一代 Web 表单”。和现有的 HTML 表单相比,XForms 有许多突出的优点。正如 Recommendation中所说的,“通过将传统的 XHTML 表单分成三部分 —— XForms 模型、实例数据和用户界面,从而把表示从内容中分离出来、提高重用性和实现强类型,可以减少和服务器通信的次数、提供设备独立性,并减少脚本的使用”。
XForms 文档有一个数据模型,包含一个或多个 XML 实例文档。表单操纵这些实例文档,并负责将 XML 提交到后端系统。
2006 年 3 月,XForms 1.0 规范第二版的发布是 XForms 的一个重要里程碑。
服务内容准则在 Web 服务器上布置需要处理的表单文档时需要考虑一些因素。这直接依赖于具体的部署环境。下表列举了一些可能的配置:
表 1. 一些浏览器和 XForms 处理程序选项浏览器XForms 处理程序Mozilla FirefoxMozilla XForms
FormFaceMicrosoft Internet ExplorerformPlayer
MozzIE
FormFacesX-SmilesN/AOperaFormFacesApple SafariFormFaces
由上表可知,根据配置的不同情况可能非常复杂。当然也可使用 Chiba 这样的服务器端处理程序,这种处理程序适合上述所有浏览器平台。这里有意省略了支持的操作系统,那是另一方面的问题了。
不同的配置各有优缺点。本文不打算讨论这些问题,可根据自己的具体要求决定。本文主要讨论如何编写可用于上表列出大多数配置的 XHTML + XForms 内容。
本文假设采用下列部署:
  • 带有 Mozilla XForms 的 Mozilla Firefox
  • 带有 formsPlayer 的 Microsoft Internet Explorer
  • X-Smiles
  • 其他的浏览器都使用 FormFaces
为了保证正常运行,服务器端还有两点要求:
  • Firefox 要求提供的服务内容其 HTTP 响应头部的内容类型必须包含一个 application/xhtml+xml 值。从技术上讲,就是需要一种能够调用其 “标准” 呈现模式的内容类型。关于 Firefox 呈现的更多信息请参阅 。
  • Internet Explorer 要求服务内容的 HTTP 响应头部中的 Content-type 包含 text/html 或 application/xhtml+xml。关于 Internet Explorer 对内容类型的处理的更多信息,请参阅 。
免责声明:不同版本的 Internet Explorer 可能有不同的配置参数,很可能有一些配置不能工作。详情参阅 。
为了让 Apache Tomcat 这样的 Web 服务器支持此类内容,只需要将 web.xml 配置文件更新为如下内容:
清单 1. Apache Tomcat web.xml 配置文件
1
2
3
4
<mime-mapping>
<extension>html</extension>
<mime-type>application/xhtml+xml</mime-type>
</mime-mapping>




设置 Content-type 头部还有很多方法,和具体的 Web 服务器有关。要修改 Java™ Servlet 的头部,需要:
清单 2. Java Servlet 设置 HTTP 头部 Content-type
1
2
3
4
5
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// Logic to determine which content type goes here...
response.setContentType("application/xhtml+xml");
}




为了更好地理解不同配置和需求,表 2 列出了服务的内容:
表 2. HTTP Content-type 头部设置客户机内容类型Firefox + Moz XFormsapplication/xhtml+xml
application/xml
application/___+xml (any +xml)IE + formsPlayerformPlayer
MozzIE
FormFacesIE + MozzIEapplication/xhtml+xmlX-Smilesapplication/xhtml+xmlOpera + FormFacestext/html
application/xhtml
application/xml
application/___+xml (any +xml)Safari + FormFacestext/html
application/xhtml
application/xml
application/___+xml (any +xml)
返回列表