Sealyu

--- The devil's in the Details

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  234 随笔 :: 83 文章 :: 70 评论 :: 0 Trackbacks

2009年7月3日 #

推荐快播免费电影网站

posted @ 2009-07-03 20:07 seal 阅读(19) | 评论 (0)编辑 收藏

2009年6月30日 #

实体Entity中通过@Enumerated标注枚举类型,例如将CustomerEO实体中增加一个CustomerType类型的枚举型属性,标注实体后的代码如下所示。

@Entity

@Table(name = "customer")

public class CustomerEO implements java.io.Serializable {

……

         private CustomerType type;

 

         @Enumerated(EnumType.STRING)

         public CustomerType getType() {

                   return type;

         }

 

         public void setType(CustomerType type) {

                   this.type = type;

         }

 

         public enum CustomerType {

                   COMPETITOR, INVESTOR, PARTNER, VENDER

         }

 

}

在实体中虽然标注成枚举类型,但当实体持久化后,表中所对应的值仍旧是基本的数据类型,以上代码创建表的SQL语句是:

CREATE TABLE customer (

         id int(20) NOT NULL auto_increment,

         name varchar(255),

         type varchar(255),

         PRIMARY KEY (id)

)

使用枚举类型后,在创建实体时便可以直接引用枚举类型,例如以下代码所示。

CustomerEO customer = new CustomerEO();

customer.setName("Janet2");

customer.setType(CustomerType.PARTNER);

entityManager.persist(customer);

在使用@Enumerated注释时,需要注意以下几个问题:

l         因为枚举类型的有名称和值两个属性,所以在持久化时可以选择持久化名称或是持久化值。通过EnumType来定义,它有两个值如下所示。

public enum EnumType {

ORDINAL,

STRING

}

ORDINAL表示持久化的为枚举类型的值,STRING表示持久化的为枚举类型的名称。默认为ORDINAL,持久化值。例如以上示例中标注的为STRING,这样持久化实体后,数据库中保存的是枚举类型的名称,如图所示。

若此时改成ORDINAL,代码如下:

         @Enumerated(EnumType.ORDINAL)

         public CustomerType getType() {

                   return type;

         }

则同样持久化的实体后,数据库保存的结果如图所示。

l         如何选择STRINGORDINAL

如果使用STRING保存,虽然从数据库中查询数据时非常直观,能够清楚的看出该类型代表意义,但这样也会带来其他的问题。若此时枚举类型的定义改变,例如上例中的枚举类型名称改为:

         public enum CustomerType {

                   CUST_COMPETITOR, INVESTOR, PARTNER, VENDER

         }

则此时数据库中保存的“COMPETITOR”的值将不能转化为枚举类型CustomerType中的“CUST_COMPETITOR”的值。但若使用ORDINAL则不会带来这种问题。所以建议使用ORDINAL类型来持久化枚举类型。

l         枚举类型的定义位置,实体外部VS实体内部。

上例中CustomerType枚举类型定义在CustomerEO实体内部,这是因为只有CustomerEO这个实体会使用CustomerType类型,其他的实体不会使用该类型。该类型与这个实体关系紧密联系。

但若此时多个实体公用一个枚举类型时,则可以将枚举类型单独定义,定义在实体的外部。有这样一个枚举类型BusinessLine,它定义在实体外部,代码如下:

public enum BusinessLine {

         REAL_ESTATE,FINANCE, NON_PROFIT

}

例如CustomerEO实体增加一个BusinessLine的枚举类型,代码如下所示。

@Entity

@Table(name = "customer")

public class CustomerEO implements java.io.Serializable {

……

         private BusinessLine businessLine;

 

         @Enumerated(EnumType.STRING)

         public BusinessLine getBusinessLine() {

                   return businessLine;

         }

 

         public void setBusinessLine(BusinessLine businessLine) {

                   this.businessLine = businessLine;

         }

}

posted @ 2009-06-30 13:18 seal 阅读(20) | 评论 (0)编辑 收藏

2009年6月29日 #

COMSHARP CMS写道:Cheat Sheet 一词在中文中并没有很贴切的对译,大概是考试作弊条一类的东西,这要求 Cheat Sheet 必须短小精悍又覆盖广泛,作为 Web 开发与设计师,免不了在工作时查询大量资料,某个 Web 色值,某个 JavaScript 库的核心语法,这类资料如果攒齐了,怕有半间屋子那么多,如果用 Cheet Sheet 也许几十页纸就够了,本文收集了近百份用于 Web 开发与设计的 Cheet Sheet,你会发现他们非常实用。

HTML, XHTML, CSS2

CSS2 Cheat Sheet

不仅是一份完整的 CSS2 速查手册,还让你了解每个属性该怎么用。预览下载 (PDF)

Gosquared CSS help sheets

设计和结构都很整齐,漂亮。下载(PDF)

CHEAT_SHEETS

addedbytes CSS2 Cheat Sheet

该速查手册只有一页纸,包含 CSS 2.1 全部选择器和属性,还包含一个盒子模型示例。下载(PDF | PNG

Core css

将 CSS 的核心知识分成3部分,包含了 CSS 的方方面面。下载 (需免费注册)

core css

core css

CSS Shorthand Cheat Sheet 

一些不容易记住的 CSS 元素。下载 (PDF)

CSS2 – Quick Reference Guide – PDF  下载(PDF)

XHTML 1.1 Cheat Sheet

XHTML 1.1 细则中涉及到的所有元素与属性。预览 | 下载

CHEAT_SHEETS

Gosquared html help sheets

设计漂亮,结构精良的 HTML 速查。下载(PDF)

CHEAT_SHEETS

HTML Cheat Sheet

一份 A4 纸大小的单页 HTML 速查表。下载 (PDF | PNG

CHEAT_SHEETS

HTML5 Canvas Cheat Sheet

HTML5 Canvas 对象的速查手册,直接编译自 WHATWG specs 细则,只是更容易阅读一些。下载 (PDF | PNG

CHEAT_SHEETS

HTML Character Entities Cheat Sheet

HTML 字符标识速查。下载 ( PDF | PNG

CHEAT_SHEETS

HTML Character Entities Cheat Sheet

该表包含 HTML 4 字符标识,包括 ISO8859-1 (Latin-1)  中的字符。预览 | 下载CHEAT_SHEETS

HTML Colors Cheat Sheet

该  HTML 颜色表包含 1050 种颜色,按色度区分,每个色度包含25中不同饱和度与亮度。还包含216种 Web 安全色。预览 | 下载(PDF)

CHEAT_SHEETS

RGB Hex Colour Chart

RGB 16进制颜色表。包含216种 Web 安全色。下载 (PNG | PDF

CHEAT_SHEETS

Scripting 速查手册

JavaScript Cheat Sheet

包含 JavaScript 的 的方法与函数,正则表单时,以及 XMLHttpRequest  对象。下载(PNG | PDF

CHEAT_SHEETS

JavaScript DOM Cheatsheet

JavaScript DOM 结构速查手册。下载(PDF)

CHEAT_SHEETS

jQuery 1.3 Cheat Sheet

jQuery 1.3 速查表。预览 | 下载(PDF)

CHEAT_SHEETS

jQuery Cheat Sheet 1.2  jQuery 1.2 速查手册 下载(PDF)

CHEAT_SHEETS

mootools 1.2 cheat sheet

另一个 JavaScript 库 MooTools 1.2 速查手册。下载(PDF)

CHEAT_SHEETS

prototype 1.5.0  JavaScript 库 Prototype 1.5 速查手册。下载 (PDF)

CHEAT_SHEETS

Prototype 1.6.0.2 Cheat Sheet 

JavaScript 库 Prototype 1.6.0.2 速查手册。下载(PDF)

CHEAT_SHEETS

Addison-Wesley’s JavaScript Reference Card

 JavaScript 参考手册。下载(PDF)

CHEAT_SHEETS

jQuery selectors

对 jQuery 开发者来说,该速查手册不可或缺,详细列举了 jQuery 所有选择器。下载 (徐免费注册)

CHEAT_SHEETS

服务器端编程

PHP Cheat Sheet (V2)

单页 PHP 参考手册,包含日期格式,正则表达式以及常用函数。下载 (PDF | PNG

CHEAT_SHEETS

visibone

该站包含2页基本PHP速查手册,以及8页高级速查手册。非免费。

CHEAT_SHEETS

Php 4 Reference Card  PHP4 参考速查手册。下载(PDF)

CHEAT_SHEETS

PHP Cheat Sheet

PHP 比较操作速查手册。下载

CHEAT_SHEETS

Core C# and .NET Quick Reference  C# 与 .NET 速查参考手册。下载(PDF)

CHEAT_SHEETS

ASP.net  ASP.NET 速查参考手册。下载

CHEAT_SHEETS

MS ASP  古老的 ASP 与 VB Script 速查手册。下载(PNG | PDF

CHEAT_SHEETS

msnet formatting strings 微软 .NET 字符串格式化速查。下载(PDF)

CHEAT_SHEETS

SQL (Structured Query Language) in one page  SQL 语言速查。直接访问

CHEAT_SHEETS

MySQL Cheat Sheet  MySQL 速查。下载(PNG | PDF

CHEAT_SHEETS

XML (eXtensible Markup Language) in one page XML 单页速查手册。直接访问

CHEAT_SHEETS

XML Syntax Quick Reference  XML 语法参考。下载(PDF)

CHEAT_SHEETS

SEO 速查手册

The Web Developer’s SEO Cheat Sheet

出自 SEO MOZ 的 SEO 速查手册,包括重要的 SEO HTML 标签,搜索引擎索引的限制,Title 标签语法建议等。下载(PDF)

CHEAT_SHEETS

本文资料来源:http://www.tripwiremagazine.com/tools/cheat-sheets/front-end-web-developers-toolbox.html


来自: comsharp
posted @ 2009-06-29 11:35 seal 阅读(17) | 评论 (0)编辑 收藏

2009年6月27日 #

今天看了《最后的圣殿骑士》,终于知道了这句话的中文含义:
Don't let me keep you 不耽误你了/不妨碍你了

还有一句:

under the weather 不舒服(身体不适)

He was a little bit under the weather.
他生病。


posted @ 2009-06-27 22:47 seal 阅读(11) | 评论 (0)编辑 收藏

2009年5月28日 #

Example:
Python代码
  1. {% if value|divisibleby:"2" %}  
  2.     Even!  
  3. {% else %}  
  4.     Odd!  
  5. {% else %}  

Returns True if the value is divisible by the argument.
posted @ 2009-05-28 10:58 seal 阅读(27) | 评论 (0)编辑 收藏

Django不支持退出循环操作。如果我们想退出循环,可以改变正在迭代的变量,让其仅仅包含需要迭代的项目。同理,Django也不支持continue语句,我们无法让当前迭代操作跳回到循环头部。(请参看本章稍后的理念和限制小节,了解下决定这个设计的背后原因)

{% for %} 标签在循环中设置了一个特殊的 forloop 模板变量。这个变量能提供一些当前循环进展的信息:

forloop.counter 总是一个表示当前循环的执行次数的整数计数器。这个计数器是从1开始的,所以在第一次循环时 forloop.counter 将会被设置为1。例子如下:

{% for item in todo_list %}
<p>{{ forloop.counter }}: {{ item }}</p>
{% endfor %}

forloop.counter0 类似于 forloop.counter ,但是它是从0计数的。第一次执行循环时这个变量会被设置为0。

forloop.revcounter 是表示循环中剩余项的整型变量。在循环初次执行时 forloop.revcounter 将被设置为序列中项的总数。最后一次循环执行中,这个变量将被置1。

forloop.revcounter0 类似于 forloop.revcounter ,但它以0做为结束索引。在第一次执行循环时,该变量会被置为序列的项的个数减1。在最后一次迭代时,该变量为0。

forloop.first 是一个布尔值。在第一次执行循环时该变量为True,在下面的情形中这个变量是很有用的。

{% for object in objects %}
{% if forloop.first %}<li class="first">{% else %}<li>{% endif %}
{{ object }}
</li>
{% endfor %}

forloop.last 是一个布尔值;在最后一次执行循环时被置为True。一个常见的用法是在一系列的链接之间放置管道符(|)

{% for link in links %}{{ link }}{% if not forloop.last %} | {% endif %}{% endfor %}

The above template code might output something like this::

Link1 | Link2 | Link3 | Link4

3.

forloop.parentloop 是一个指向当前循环的上一级循环的 forloop 对象的引用(在嵌套循环的情况下)。例子在此:

{% for country in countries %}
<table>
{% for city in country.city_list %}
<tr>
<td>Country #{{ forloop.parentloop.counter }}</td>
<td>City #{{ forloop.counter }}</td>
<td>{{ city }}</td>
</tr>
{% endfor %}
</table>
{% endfor %}

forloop 变量仅仅能够在循环中使用,在模板解析器碰到 {% endfor %} 标签时, forloop 就不可访问了。

Context和forloop变量

在一个 {% for %} 块中,已存在的变量会被移除,以避免 forloop 变量被覆盖。Django会把这个变量移动到 forloop.parentloop 中。通常我们不用担心这个问题,但是一旦我们在模板中定义了 forloop 这个变量(当然我们反对这样做),在 {% for %} 块中它会在 forloop.parentloop 被重新命名。

for
轮询数组中的每一元素。例如显示一个给出的运动员的序列``athlete_list``:
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>
你同样可以反过来用``{% for obj in list reversed %}``轮询一个列表。
``for``循环设置了许多循环中有用的变量(见表F-1)。
Inline literal start-string without end-string.
表 F-1. {% for %}循环中的可用变量
变量名描述
forloop.counter 循环的当前重复值 (标示为1)。
forloop.counter0 循环的当前重复值 (标示为0)。
forloop.revcounter 循环到最后的重复数 (标示为1)。
forloop.revcounter0 循环到最后的重复数 (标示为0)。
forloop.first 第一次循环则为``True``。
forloop.last 最后一次循环则为``True`` 。
forloop.parentloop 用于嵌套循环,该循环位于当前循环之上。


posted @ 2009-05-28 10:38 seal 阅读(32) | 评论 (0)编辑 收藏

2009年5月19日 #

发现为本文起一个合适的标题还不是那么容易,呵呵,所以在此先说明下本文的两个目的:
(1)介绍javascript中的eval函数的用法
(2)如何在函数内执行全局代码
►先来说eval的用法,内容比较简单,熟悉的可以跳过。
eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行结果是一个值,则返回此值,否则返回undefined。
需要特别注意的是对象声明语法“{}”并不能返回一个值,需要用括号括起来才会返回值,简单示例如下:
var code1='"a" + 2';    //表达式
var code2='{a:2}';      
//语句
alert(eval(code1));     
//->'a2'
alert(eval(code2));     
//->undefined
alert(eval('(' + code2 + ')'));    //->[object Object]
        可以看到,对于对象声明语句来说,仅仅是执行,并不能返回值。为了返回常用的“{}”这样的对象声明语句,必须用括号括住,以将其转换为表达式,才能返回其值。这也是使用JSON来进行Ajax开发的基本原理之一。在例子中可以清楚的看到,第二个alert语句输出的是undefined,而第三个加了括号后输出的是语句表示的对象。
            ►现在来说本文的重点,如何在函数内执行全局代码。为了说明这个问题,先看一个例子:
var s='global';    //定义一个全局变量
function demo1(){
    eval('var s="local"');
}
demo1();
alert(s);    //->global
         很好理解,上面的demo1函数等价于:function demo1(){var s='local';},其中定义了一个局部变量s。
        所以最后的输出是global并不是什么奇怪的事情,毕竟大家都能很清楚的区分局部变量和全局变量。
        仔细体会一下,可以发现eval函数的特点,它总是在调用它的上下文变量空间(也称为:包,closure)内执行,无论是变量定义还是函数定义都是如此,所以如下的代码会产生函数未定义的错误:
var s='function test(){return 1;}';     //一个函数定义语句
function demo2(){
    eval(s);
}
demo2();
alert(test());    //->error:test is not defined
        这是因为test函数在局部空间定义,demo2函数内可以访问到,外面就访问不到了。

         而在实际的Ajax开发中,有时我们需要从服务器动态获取代码来执行,以减轻一次载入代码过多的问题,或者是一些代码是通过Javascript自身生成的,希望用eval函数来使其执行。
但这样的动态获取代码的工作一般在函数内完成,比如:
function loadCode(){
    var code=getCode();
    eval(code);
}
       可见eval不可能在全局空间内执行,这就给开发带来了不少问题,也看到过很多人为此郁闷。
        不过现在偶终于找到了解决办法,嘿嘿,可以同时兼容IE和Firefox,方法如下:
var X2={}    //my namespace:)
X2.Eval=function(code){
 if(!!(window.attachEvent && !window.opera)){
  
//ie
  execScript(code); 
 }else{
  
//not ie
  window.eval(code);
 }
}
        现在如果要想在函数内定义全局代码,就可以通过调用X2.Eval(code)方法,一个例子如下:
var s='global';
function demo3(){
 X2.Eval('var s="local"');
}
demo3();
alert(s); //->'local'
        可见,在demo3函数内重新定义了全局变量s="local"。
        需要注意的是X2.Eval并不返回值,如果要进行表达式的求值,还是用系统的eval函数。X2.Eval设计为仅做全局代码定义用。
        其实看到这里,或许有人感觉问题也太容易解决了点,呵呵,但发现这个办法倒是需要些运气和技巧的:
(1)对于IE浏览器,默认已经提供了这样的函数:execScript,用于在全局空间执行代码,只是知道的人还不多。
(2)对于Firefox浏览器,直接调用eval函数,则在调用者的空间执行;如果调用       window.eval则在全局空间执行。这个知道的人估计就更少了。毕竟alert(eval==window.eval)返回true!
         Firefox的eval函数的特点的确是很令人奇怪的,但从javascript规范中倒也能找到其来源:
If value of the eval property is used in any way other than a direct call (that is, other than by the explicit use of its
name as an Identifier which is the MemberExpression in a CallExpression), or if the eval property is assigned to,
an EvalError exception may be thrown.
      意思大概就是说eval函数的执行是和调用者相关的,但并没有说其执行上下文的问题。所以IE和Firefox孰是孰非也就很难说了,大家知道解决办法就好。
 
 
posted @ 2009-05-19 10:10 seal 阅读(28) | 评论 (0)编辑 收藏

2009年5月18日 #

这两天在作seam的时候不时遇到“org.jboss.util.NestedSQLException: Transaction is not active”的错误信息,后来到jboss的wiki上发现了问题的原因和解决方法:

How do I set the Transaction Timeout?

Transaction timeout (unit is always seconds) can be configured in various ways:

This argument is the same no matter if you are using JBossTM(<=4.0.5) or JBossJTA-Arjuna(>=4.2).

  • Globally: You can change this behavior globally by modifying the TransactionManagerService in /conf/jboss-service.xml (or /deploy/jta-service.xml for 4.0.3)

Version <= 4.0.5

This part is the same for either JBossTM or JBossJTA and is the same for ejb2 and ejb3

  • Per-method basis: Modifying the <transaction-timeout> element inside the <method> element of a session or entity bean. This is located in the META-INF/jboss.xml deployment descriptor of a session bean. When the transaction timeout is specified at the method level, it overrides the default timeout. Further information about this element can be found in jboss-x.x.x/docs/dtd/jboss_4_0.dtd. Example taken from the testsuite:

  • Using BMT: Calling javax.transaction.UserTransaction.setTransactionTimeout(int seconds). Please, be aware that this only applies to transactions started after this invocation on the same thread. Example:

@TransactionTimeout(1500)


posted @ 2009-05-18 10:01 seal 阅读(40) | 评论 (0)编辑 收藏

2009年5月16日 #

今天上网更新系统,Office 2003 也要正版验证了。
于是上网查查发现现在的用序列号GWH28-DGCMP-P6RC4-6J4MT-3HFDY已经不行了,需要更换为
Office System:       FTYBP-J2B4K-K7JHY-3JG2K-MT9VM
FrontPage/OneNote:WFDWY-XQXJF-RHRYG-BG7RQ-BBDHM

更改Key的方法:
1.删除注册表[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Registration\{90110804-6000-11D3-8CFE-0150048383C9}]键中ProductID和DigitalProductID两项。
2.运行Office,出现安装程序,输入keyFTYBP-J2B4K-K7JHY-3JG2K-MT9VM

3.去
http://office.microsoft.com/zh-cn/downloads/maincatalog.aspx?lc=zh-cn验证一下,OK。
posted @ 2009-05-16 14:57 seal 阅读(160) | 评论 (1)编辑 收藏

2009年5月13日 #

今天在xhtml中使用javascript时一直报错,后来才发现在xhtml中javacript里使用'<' '&'是不合法的。

Making JavaScript Compatible with XHTML

XHTML is subject to the same syntactical rules as XML. Because of this, an XHTML processor treats the characters < and & as markup, even if they reside inside a <script> block. Since the < and & characters are also used by the JavaScript language, this creates a conflict. When an XHTML processor sees these characters within the JavaScript code of a <script> block, it attempts to parse the JavaScript code as if it were markup, which causes the XHTML parser to fail.

You can get around this conflict and make all JavaScript code compatible with XHTML by placing the JavaScript code within a CDATA section. A CDATA section in XML/XHTML starts with the characters <![CDATA[ and ends with the characters ]]>.

Any characters within the starting and ending element of a CDATA section are not treated by the XML/XHTML processor as markup, thus preventing a conflict.

Here is an example of how to declare JavaScript code within a CDATA section so that it is compatible with XHTML:

<script type="text/javascript">
//<![CDATA[

alert("<This is compatible with XHTML>");

//]]>
</script>

Note that JavaScript source code must be placed within the opening and closing elements of the CDATA section. The CDATA section itself should be commented out with a JavaScript single-line comment // as in the example above. This is so that the JavaScript interrupter does not interpret the CDATA markup as JavaScript, which would cause a JavaScript error.

JavaScript code that is imported into an XHTML document from an external source file is always compatible with XHTML. So, for example, any code you place into the external file external.js and import into an XHTML file via the src attribute of the <script> tag will be valid. Here is an example of how to import the file external.js:

<script type="text/javascript" src="external.js"></script>

在XHTML文档中合适的使用CSS和JavaScript

XHTML™ 1.0 The Extensible HyperText Markup Language (Second Edition) 定义XHTML是为了把HTML 4扩展成像XML 1.0一样的应用程序。

在许多站点中XHTML正在迅速的替代HTML 4;然而,主流浏览器对完全支持XHTML方面表现得不足,和网页设计师对HTML 4与XHTML的基本差异缺乏理解,产生了当今网络上的一个不断扩大的问题。

XHTML是XML,不是HTML

其中关于XHTML的主要的误解是,它仅仅是另外一个版本的HTML。这个误解产生于这样的事实:Microsoft® Internet Explorer只在文件以Mime类型为 text/html提交时,才支持XHTML,而标准中建议的类型其实是application/xhtml+xml

当一个XHTML页面的MIME类型被提交为text/html时,它被所有的浏览器当作HTML处理,就好像XHTML比起HTML来没有任何不同。但是当一个XHTML页面的MIME类型被提交为text/xmlapplication/xhtml+xml时,它将被当作XML文档处理,而设计和显示XML都是必须要遵守严格规则的。

真正的XHTML就是一个XML的应用,所以创建XHTML时也要遵守严格的规则。特别是:

  1. 未经过处理的<&不允许出现在CDATA区域(<!CDATA...>)之外。
  2. 注释(<!—— ... ——>)中不能包含双横线。
  3. 包含在注释(<!—— ... ——>)中的内容将被忽略。

在内嵌的stylescript中出现的问题

在被当作XML而不是HTML处理时,内嵌的style和script标记会产生几个不同的问题。

JavaScript中包含了一些在XHTML中不允许存在的字符

典型的JavaScript中包含了一些特殊字符,这些字符在XHTML中是不允许放在CDATA区域之外的。

<script type="text/javascript">
var i = 0;

while (++i < 10)
{
// ...
}
</script>

注意这个例子不是以正确格式书写的XHTML,因为使用了未经处理的“<”,它只能在被当作XHTML或XML标记的一部分时出现。

在内嵌的stylescript中使用注释

熟悉HTML的设计师通常把内嵌的stylescript内容放到注释中,这样可以在不支持样式和脚本的浏览器中隐藏它们。

<style type="text/css">
<!--
body {background-color: blue; color: yellow;}
-->
</style>
<script type="text/javascript">
<!--
var i = 0;
var sum = 0;

for (i = 0; i < 10; ++i)
{
sum += i;
}
alert('sum = ' + sum);
// -->
</script>

这个例子举例说明了特定的浏览器可以忽略注释里的内容。另外,这个例子还显示了不同的浏览器在处理text/xml或者 application/xhtml+xml内容时产生的不同问题。

Mozilla 1.1+/Opera 7
不能使用CSS,也不能执行JavaScript。
Netscape 7.0x/Mozilla 1.0.x
不能使用CSS,但可以执行JavaScript。
Internet Explorer 5.5+
无法正常显示文档。

包含双横线的内嵌stylescript

另一个把JavaScript包含在XHTML文件的注释中产生的问题,与在XHTML的注释中使用双横线会产生的问题一样。

<script type="text/javascript">
<!--
var i;
var sum = 0;

for (i = 10; i > 0; --i)
{
sum += i;
}
// -->
</script>

使用CDATA替代注释

直接把JavaScript放入CDATA区域会在低版本不支持XML的浏览器中产生问题,不过,把JavaScript的注释(//……)与CDATA一起使用,就能解决向下兼容的问题了。

<script type="text/javascript">
//<![CDATA[
var i = 0;

while (++i < 10)
{
// ...
}
//]]>
</script>

例子

在注释中使用内嵌style的CSS规则

例子1 - XHTML 1.0 Strict在text/html
这个例子举例说明当CSS规则包含内联和包含在注释中时的XHTML在text/html的行为。这个例子支持Netscape 7.x,Mozilla,Opera 7和Internet Explorer 5.5+那一个都能像期望一样应用CSS规则。
例子2 - XHTML 1.0 Strict在text/xml
这个例子举例说明当CSS规则包含内联和包含在注释中时的XHTML在text/xml的行为。这个例子支持Netscape 7.x,Mozilla,Opera 7但不支持Internet Explorer 5.5+。注意etscape 7.x,Mozilla和Opera同意包含在注释的内联CSS规则将被忽略。
例子3 - XHTML 1.0 Strict在application/xhtml+xml
这个例子举例说明当CSS规则包含内联和包含在注释中时的XHTML在application/xhtml+xml的行为。这个例子支持Netscape 7.x,Mozilla,Opera 7但不支持Internet Explorer 5.5+。注意etscape 7.x,Mozilla和Opera同意包含在注释的内联CSS规则将被忽略。

使用外部文件的CSS规则

例子4 - XHTML 1.0 Strict在text/html
这个例子举例说明当在使用外部文件的CSS规则的时候XHTML在text/html的行为。这个例子支持Netscape 7.x,Mozilla,Opera 7和Internet Explorer 5.5+。
例子5 - XHTML 1.0 Strict在text/xml
这个例子举例说明当在使用外部文件的CSS规则的时候XHTML在text/xml的行为。这个例子支持Netscape 7.x,Mozilla和Opera 7但不支持不支持Internet Explorer 5.5+
例子6 - XHTML 1.0 Strict在application/xhtml+xml
这个例子举例说明当在使用外部文件的CSS规则的时候XHTML在application/xhtml+xml的行为。这个例子支持Netscape 7.x,Mozilla和Opera 7但不支持不支持Internet Explorer 5.5+

建议

不要在XHTML中内联stylescript

用外部文件包含CSS规则和JavaScript来替换内联样式和脚本是创建XHTML最佳方式,在向后兼容方式时,如果内容的MIME类型从text/htmlapplication/xhtml+xml改变时将不会被打断。

这个建议可能看起来更强烈,可是,它是未来XHTML要打算的问题,当XHTML在text/htmlapplication/xhtml+xml转移在几年后发生。

如果你仅仅测试你的XHTML在text/html的时候,那么你可能产生问题,例如像:不能准确的描述出主题。移动CSS和JavaScript到单独的文件是可靠的方法,关于改变你XHTML的服务方式。

理解XHTML 1.0的HTML兼容指导

这个XHTML 1.0 HTML Compatibility Guidelines帮助创建XHTML文档向后兼容性在那些不能理解XML的老浏览器。

请注意那是纯粹的XHTML文档,你不需要使用xml-stylesheet处理指导,但应该使用link涉及的外部文件包含CSS。



另外,附XHTML的一些规范:
1.所有的标记都必须要有一个相应的结束标记
以前在 HTML 中,你可以打开许多标签,例 如 <p> 和 <li> 而不一定写对应的 </p> 和 </li> 来关闭它们.但 在 XHTML 中这是不合法的.XHTML要求有严谨的结构,所有标签必须关闭.如果是单独不成对的标签,在标签最后加一个 "/" 来关闭它.例如:
<br /><img height="80" alt="网页设计师" src="http://images/logo_w3cn_200x80.gif"&n ... 00" /> 

2.所有标签的元素和属性的名字都必须使用小写
与 HTML 不 一样,XHTML 对大小写是敏感的,<title> 和 <TITLE> 是不同的标签.XHTML 要求所有的标签和属性的 名字都必须使用小写.例如:<BODY> 必须写成 <body> .大小写夹杂也是不被认可的,通 常 dreamweaver 自动生成的属性名字 "onMouseOver" 也必须修改成 "onmouseover".

3.所有的 XML 标记都必须合理嵌套
同样因为 XHTML 要求有严谨的结构,因此所有的嵌套都必须按顺序,以前我们这样写的代码:
<p><b></p></b> 
必须修改为:
<p><b></b></p> 
就是说,一层一层的嵌套必须是严格对称.

4.所有的属性必须用引号 "" 括起来
在 HTML 中,你可以不需要给属性值加引号,但是在 XHTML 中,它们必须被加引号.例如:
<height=80> 
必须修改为:
<height="80"> 
特殊情况,你需要在属性值里使用双引号,你可以用 ",单引号可以使用 &apos;,例如:
<alt="say&apos;hello&apos;"> 


5.把所有 < 和 & 特殊符号用编码表示
任何小于号(<),不是标签的一部分,都必须被编码为 &lt;
任何大于号(>),不是标签的一部分,都必须被编码为 &gt;
任何与号(&),不是实体的一部分的,都必须被编码为 &amp;

6.给所有属性赋一个值
XHTML 规定所有属性都必须有一个值,没有值的就重复本身.例如:
<td nowrap> <input type="checkbox" name="shirt" value="medium" checked> 
必须修改为:
<td nowrap="nowrap"> <input type="checkbox" name="shirt" value="medium" checked="checked" /> 

7.不要在注释内容中使用 "--","--" 只能发生在 XHTML 注释的开头和结束,也就是说,在内容中它们不再有效.例如下面的代码是无效的:
<!--这里是注释-----------这里是注释--> 
用等号或者空格替换内部的虚线:
<!--这里是注释============这里是注释--> 

以上这些规范有的看上去比较奇怪,但这一切都是为了使我们的代码有一个统一、唯一的标准,便于以后的数据再利用.

posted @ 2009-05-13 14:28 seal 阅读(92) | 评论 (0)编辑 收藏

仅列出标题  下一页