??xml version="1.0" encoding="utf-8" standalone="yes"?> 传统上,Hibernate的配|依赖于外部 XML 文gQ数据库映射被定义ؓ一l?XML 映射文gQƈ且在启动时进行加载。创些映有很多ҎQ可以从已有数据库模式或JavacL型中自动创徏Q也可以手工创徏。无论如何,您最l将获得大量?Hibernate 映射文g。此外,q可以用工P通过javadoc样式的注释生成映文Ӟ管q样会给您的构徏q程增加一个步骤?/p>
在最q发布的几个Hibernate版本中,出现了一U基?Java 5 注释的更为y妙的新方法。借助新的 Hibernate Annotation 库,卛_一ơ性地分配所有旧映射文g——一切都会按照您的想法来定义——注释直接嵌入到您的 Java cMQƈ提供一U强大及灉|的方法来声明持久性映。籍p动代码完成和语法H出昄功能Q最q发布的Java IDE也ؓ其提供了有力的支持?/p>
Hibernate Annotationq支持新?EJB 3 持久性规范。这些规范旨在提供一U标准化?Java 持久性机制。由?Hibernate 3 q提供了一些扩展,因此您可以十分轻村֜遵从q些标准Qƈ使用 EJB 3 ~程模型来对 Hibernate 持久层进行编码?/p>
现在Q让我们来动手用Hibernate Annotation?/p>
要?Hibernate AnnotationQ您臛_需要具?Hibernate 3.2和Java 5。可以从 Hibernate 站点 下蝲 Hibernate 3.2 ?Hibernate Annotation库。除了标准的 Hibernate JAR 和依赖项之外Q您q需?Hibernate Annotations .jar 文gQ?em>hibernate-annotations.jarQ、Java 持久?API Q?em>lib/ejb3-persistence.jarQ。如果您正在使用 MavenQ只需要向 POM 文gd相应的依赖项卛_Q如下所C: 下一步就是获?Hibernate 会话工厂。尽无需惊天的修改,但这一工作与?Hibernate Annotations有所不同。您需要?AnnotationConfiguration cL建立会话工厂Q?/p>
管通常使用 q期的许?Java 目都用了轻量U的应用框架Q例?Spring。如果您正在使用 Spring 框架Q可以?AnnotationSessionFactoryBean c轻村־立一个基于注释的 Hibernate 会话工厂Q如下所C: 既然已经知道了如何获得注释所支持?Hibernate 会话Q下面让我们来了解一下带注释的持久性类的情况: 像在其他M Hibernate应用E序中一P带注释的持久性类也是普?POJO。差不多可以说是。您需要向 Java 持久?API Q?em>javax.persistence.*Q添加依赖项Q如果您正在使用M特定?Hibernate的扩展,那很可能是 Hibernate Annotation E序包(org.hibernate.annotations.*Q,但除此之外,它们只是具备了持久性注释的普?POJO 。下面是一个简单的例子Q?/p>
正像我们所提到的,q非常简单。@Entity 注释声明该类为持久类。@Id 注释可以表明哪种属性是该类中的独特标识W。事实上Q您既可以保持字D(注释成员变量Q,也可以保持属性(注释getterҎQ的持久性。后文中用基于属性的注释。基于注释的持久性的优点之一在于大量使用了默认|最大的优点是 “惯例优先原则Qconvention over configurationQ?#8221;Q。例如,您无需说明每个属性的持久性——Q何属性都被假定ؓ持久的,除非您?@Transient 注释来说明其他情c这化了代码Q相对用老的 XML 映射文g而言也大q地减少了输入工作量?/p>
Hibernate 能够地自动生成主键。Hibernate/EBJ 3 注释也可以ؓ主键的自动生成提供丰富的支持Q允许实现各U策略。下面的CZ说明了一U常用的ҎQ其?Hibernate 会Ҏ底层数据库来定一U恰当的键生成策略: 默认情况下,Hibernate 会将持久cM匚w的名U映到表和字段中。例如,前一个类可以与映到以如下代码创建的表中Q?/p>
如果您是自己生成q维护数据库Q那么这U方法很有效Q通过省略代码可以大大化代码维护。然而,qƈ不能满所有h的需求。有些应用程序需要访问外部数据库Q而另一些可能需要遵从公司的数据库命名惯例。如果有必要Q您可以使用 @Table ?@Column 注释来定制您自己的持久性映,如下所C: 该内容将映射C表中Q?/p>
也可以用其他图和列的属性来定制映射。这使您可以指定诸如列长度、非I约束等详细内容。Hibernate支持大量针对q些注释的属性。下例中包含了几种属性: Java 持久性映过E中最重要和最复杂的一环就是确定如何映表间的关系。像其他产品一P Hibernate 在该领域中提供了高度的灵zL,但却是以复杂度的增加Z仗我们将通过研究几个常见案例来了解如何用注释来处理q一问题?/p>
其中一U最常用的关pd是多对一的关pR假定在以上CZ中每?ModelPlane 通过多对一的关p(也就是说Q每个飞机模型只与一U飞机类型徏立联p,管指定的飞机类型可以与七种飞机模型建立联系Q来?PlaneType 建立联系。可如下q行映射Q?/p>
CascadeType D?Hibernate 应如何处理联操作?/p>
另一U常用的关系与上q关pȝ反:一对多再对一关系Q也UCؓ集合。在老式?Hibernate 版本中进行映或使用注释Ӟ集合令h头疼Q这里我们将要加以探讨,以您了解如何处理集合,例如Q在以上CZ中每?PlaneType 对象都可能会包含一?ModelPlanes 集合。可映射如下Q?/p>
Hibernate 最优秀的功能之一在于它能够在您的映文件中声明命名查询。随后即可通过代码中的名称调用此类查询Q这使您可以专注于查询,而避免了 SQL 或?HQL 代码分散于整个应用程序中的情c?/p>
也可以用注释来实现命名查询Q可以?@NamedQueries ?@NamedQuery 注释Q如下所C: 一旦完成了定义Q您可以像调用其他M其他命名查询一h调用它们?/p>
Hibernate 3 注释提供了强大而精致的 APIQ简化了 Java 数据库中的持久性代码,本文中只q行了简单的讨论。您可以选择遵从标准q?Java 持久?APIQ也可以利用特定?Hibernate的扩展,q些功能以损失可UL性ؓ代h提供了更为强大的功能和更高的灉|性。无论如何,通过消除?XML 映射文g的需求,Hibernate 注释简化应用程序的l护Q同时也可以使您对EJB 3 有初步认识。来试试吧! JSON的结构基于下面两?br />
q里假设我们需要创Z个User对象Qƈh以下属?/p>
您可以用以下JSON形式来表CUser对象Q?/p>
然后如果把这一字符串赋予一个JavaScript变量Q那么就可以直接使用对象的Q一属性了?/p>
完整代码: 实际使用时可能更复杂一点,比如我们为Name定义更详l的l构Q它具有FirstName和LastNameQ?/p>
完整代码: 现在我们增加一个新的需求,我们某个面需要一个用户列表,而不仅仅是一个单一的用户信息,那么q里需要创Z个用户列表数l?br />
下面代码演示了用JSON形式定义q个用户列表Q?
事实上除了?."引用属性外Q我们还可以使用下面语句Q?/p>
现在读者应该对JSON的用有点认识了Q归Uؓ以下几点Q?/p>
节Q?br />
前提 OS: WIN2000 2.准备web开发目?br />
比如我的web目录为h:\webapp\myweb\(当然可以把你的web应用攑֜%tomcat_home%\webapps\)Q称为工作目录Working folder,在工作目录h:\webapp\myweb\下徏立WEB-INF\lib,WEB-INF\classes 3.拯.jar文g 4.拯.tld文g 5.在\WEB-INF\下徏立web.xml文gQ?br />
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" <taglib> <taglib> <taglib> <taglib> <taglib> <taglib> <taglib> 7.开启tomcat,q行调试Q我的输出结果是 Ƣ迎试你的W一个用到JSTL 的网? 在js中return false的作用一般是用来取消默认动作的。比如你单击一个链接除了触发你? <script> </head> <body> <a href="xxxx.do?....." target=dolink>q接abcd </a> 最q做的项目,通过l定?button ?onclick 事g的函数提交表单。发?return false 也是很重要的。比如: <input type="submit" onclick="submitAction(); return false;" /> submitAction Ҏ里面有提交表单的动作。如果不?return falseQ在执行?submitAction 之后Qsubmit 按钮q会l箋执行它的默认事gQ就会再ơ提交表单。这可能是很多错误的根源?/p>
的确Qreturn false的含义不是阻止事件l向层元素传播Q而是L览器对事g的默认处理。你可以q样试验Q首先将所有的js脚本注释掉,在IE览器中试拖动一下图片,你会发现鼠标会成为禁止操作的样式Q图片是被禁止拖动的Q它是浏览器针对mousemove事g所提供的默认行为。return false是ZLq种行ؓQ否则就会出C描述的中断事件连l执行?/p>
另外Q和return false{效的语句ؓQwindow.event.returnValue = falseQ你可以把return false替换为此语句q进行验证?/p>
最后说明一下,此种方式只适用于IE览器?/p>
<html> if(ass[0].value.length>15){ 潜水看了众大虄_ֽ帖子Q今也A献一点心得。其dƣ赏Q疑义相与析。有不对之处请不吝拍砖? 众所周知Q在表单中加上onsubmit="return false;"可以L表单提交? view plaincopy to clipboardprint? <form action="index.jsp" method="post" onsubmit="submitTest();;"> <SCRIPT LANGUAGE="JavaScript"> 若答案ؓ是,׃用往下看了? 若答案ؓ否,错了。实际情冉|表单正常提交Q若惛_不提交,应该?/p>
view plaincopy to clipboardprint? <form action="index.jsp" method="post" onsubmit="submitTest();;">改ؓ view plaincopy to clipboardprint? <form action="index.jsp" method="post" onsubmit="return submitTest();;"> ZQ? 原来onsubmit属性就像是<form>q个html对象的一个方法名Q其|一字符Ԍ是其方法体Q默认返回trueQ? 和Java一P在该Ҏ体中你可以写L多个语句Q包括内|函数和自定义函敎ͼ?/p>
view plaincopy to clipboardprint? onsubmit=" view plaincopy to clipboardprint? Form.prototype.onsubmit = function(); { l过q样的分析后Q以上情况就不难理解了: view plaincopy to clipboardprint? <form action="index.jsp" method="post" onsubmit="submitTest();;">q样写,overrideҎ的效果ؓQ?/p>
view plaincopy to clipboardprint? Form.prototype.onsubmit = function(); { view plaincopy to clipboardprint? <form action="index.jsp" method="post" onsubmit="return submitTest();;"> view plaincopy to clipboardprint? Form.prototype.onsubmit = function(); { l论Q? view plaincopy to clipboardprint? Form.prototype.onsubmit = function(); {
Adapter,按向导提CZ一步就行了。完成以后打开你的|上d看看是不是多了一个网上连接(2Q,然后讄它的IP地址如?92.168.1.1.随便p了,q样在安装oracle的时候就可以用这一个假的网l来q接Q蒙骗一?oracle了。一定可以验证过?img src ="http://m.tkk7.com/jiafang83/aggbug/385724.html" width = "1" height = "1" />
]]>
在过dq里QHibernate不断发展Q几乎成为Java数据库持久性的事实标准。它非常强大、灵z,而且具备了优异的性能。在本文中,我们了解如何用Java 5 注释来简化Hibernate代码Qƈ使持久层的编码过E变得更松?
安装 Hibernate Annotation
...
sessionFactory = new
AnnotationConfiguration().buildSessionFactory();
W一个持久性类
@Entity
public class ModelPlane {
private Long id;
private String name;
@Id
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
生成主键
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId() {
return id;
}
定制表和字段映射
CREATE TABLE MODELPLANE
(
ID long,
NAME varchar
)
@Entity
@Table(name="T_MODEL_PLANE")
public class ModelPlane {
private Long id;
private String name;
@Id
@Column(name="PLANE_ID")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name="PLANE_NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
CREATE TABLE T_MODEL_PLANE
(
PLANE_ID long,
PLANE_NAME varchar
)
...
@Column(name="PLANE_ID", length=80, nullable=true)
public String getName() {
return name;
}
...
映射关系
@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
public PlaneType getPlaneType() {
return planeType;
}
@OneToMany(mappedBy="planeType",
cascade=CascadeType.ALL,
fetch=FetchType.EAGER)
@OrderBy("name")
public List
命名查询
@NamedQueries(
{
@NamedQuery(
name="planeType.findById",
query="select p from PlaneType p left join fetch p.modelPlanes where id=:id"
),
@NamedQuery(
name="planeType.findAll",
query="select p from PlaneType p"
),
@NamedQuery(
name="planeType.delete",
query="delete from PlaneType where id=:id"
)
}
)
l束?/h3>
]]>
school和userMember是一对多关系Q?br />
SchoolInfo.java
import javax.persistence.CascadeType;
2import javax.persistence.Column;
3import javax.persistence.Entity;
4import javax.persistence.FetchType;
5import javax.persistence.GeneratedValue;
6import javax.persistence.Id;
7import javax.persistence.OneToMany;
8import javax.persistence.Table;
9import javax.persistence.Temporal;
10import javax.persistence.TemporalType;
11
12import org.hibernate.annotations.Formula;
13import org.hibernate.annotations.GenericGenerator;
14
15@Entity
16@Table(name = "school_info")
17public class SchoolInfo implements java.io.Serializable {
18
19 @Id
20 @GeneratedValue(generator = "system-uuid")
21 @GenericGenerator(name = "system-uuid", strategy = "uuid")
22 private String id;//hibernate的uuid机制,生成32为字W串
23
24 @Column(name = "actcodeId", updatable = false, nullable = true, length = 36)
25 private String actcodeId;
26
27 @Formula("select COUNT(*) from school_info")
28 private int count;
29
30 @Temporal(TemporalType.TIMESTAMP)//不用set,hibernate会自动把当前旉写入
31 @Column(updatable = false, length = 20)
32 private Date createTime;
33
34 @Temporal(TemporalType.TIMESTAMP)
35 private Date updateTime;// 刚开始我默认insertable=false,但会d出错提示如下:
36 // Value '0000-00-00' can not be represented as java.sql.Timestamp
37
38 // mappedBy="school"q当于inverse=true,(mappedBy指定的是不需要维护关pȝ一?
39 // 应该注意的是mappedBy值对应@ManyToOne标注的属?我刚开始写?schoolId",让我郁闷了好一?nbsp;
40 @OneToMany(mappedBy = "school", cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = UserMember.class)
41 // 用范性的?׃用targetEntity?nbsp;
42 private List<usermember> users = </usermember>new ArrayList<usermember>(); </usermember>
43
44}
45
@GeneratedValue(strategy=GenerationType.AUTO)我们常用的自增长机制,我这里采用的是hibernate的uuid生成机制.
需要注意的是import javax.xx.Entity Q而不是org.hibernate.xx.Entity?/strong>
郁闷的是我上面用到@Formula,生成的sql竟然?select COUNT(*) from school_info as formula0_ from school_info schoolinfo0_,当然不能执行?L正解中~!!!!!!!!!
UserMember.java(前面引入的包已经贴过?下面׃贴了)
2 @Table(name = "teacher_info")//实体cd数据库表名不一致时,才用q个
3 public class UserMember implements java.io.Serializable {
4
5 @Id
6 @GeneratedValue(generator = "system-uuid")
7 @GenericGenerator(name = "system-uuid", strategy = "uuid")
8 private String id;
9
10 @Column(updatable = false, nullable = false, length = 20)
11 private String logonName;
12
13 @Temporal(TemporalType.TIMESTAMP)
14 @Column(updatable = false, length = 20)
15 private Date createTime;
16
17 @Temporal(TemporalType.TIMESTAMP)
18 private Date updateTime;
19
20 @ManyToOne(cascade = { CascadeType.MERGE })
21 @JoinColumn(name = "schoolId")
22 private SchoolInfo school;
23 //注意该类׃用声明schoolId属性了,如果不用@JoinColumn指明兌的字D?hibernate默认会是school_id.
24
25 }
]]>
]]>
JSON定义
JSON(JavaScript Object Notation) 是一U轻量的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。它ZECMA262语言规范Q?999-12W三版)中JavaScript~程语言的一个子集?JSON采用与编E语a无关的文本格式,但是也用了cC语言Q包括CQ?C++Q?C#Q?JavaQ?JavaScriptQ?PerlQ?Python{)的习惯,q些ҎJSON成ؓ理想的数据交换格式?
JSON使用Q?br />
JSON以一U特定的字符串Ş式来表示 JavaScript 对象。如果将hq样一UŞ式的字符串赋lQ意一?JavaScript 变量Q那么该变量会变成一个对象引用,而这个对象就是字W串所构徏出来的,好像有点拗口Q我们还是用实例来说明?
{"UserID":11, "Name":"Truly", "Email":"zhuleipro◎hotmail.com"};
<script>
var User = {"UserID":11, "Name":"Truly", "Email":"zhuleipro◎hotmail.com"};
alert(User.Name);
</script>{"UserID":11, "Name":{"FirstName":"Truly","LastName":"Zhu"}, "Email":"zhuleipro◎hotmail.com"}
<script>
var User = {"UserID":11, "Name":{"FirstName":"Truly","LastName":"Zhu"}, "Email":"zhuleipro◎hotmail.com"};
alert(User.Name.FirstName);
</script>[
{"UserID":11, "Name":{"FirstName":"Truly","LastName":"Zhu"}, "Email":"zhuleipro◎hotmail.com"},
{"UserID":12, "Name":{"FirstName":"Jeffrey","LastName":"Richter"}, "Email":"xxx◎xxx.com"},
{"UserID":13, "Name":{"FirstName":"Scott","LastName":"Gu"}, "Email":"xxx2◎xxx2.com"}
]
完整代码:
<script>
var UserList = [
{"UserID":11, "Name":{"FirstName":"Truly","LastName":"Zhu"}, "Email":"zhuleipro◎hotmail.com"},
{"UserID":12, "Name":{"FirstName":"Jeffrey","LastName":"Richter"}, "Email":"xxx◎xxx.com"},
{"UserID":13, "Name":{"FirstName":"Scott","LastName":"Gu"}, "Email":"xxx2◎xxx2.com"}
];
alert(UserList[0].Name.FirstName);
</script>
alert(UserList[0]["Name"]["FirstName"]); 或?alert(UserList[0].Name["FirstName"]);
本文通过一个实例演C,初步了解了JSON 的强大用途。可以归l如下:
]]>
tomcat已经配置?tomcat可以?a >http://jakarta.apache.org/tomcat 下蝲)
开始实战啦
1.准备jstl
?a >http://apache.towardex.com/jakarta/taglibs/standard/下蝲jakarta-taglibs-standard-current.zip
解压后成为jakarta-taglibs-standard-1.1.1
jakarta-taglibs-standard-1.1.1\lib\下的两个jar文gQstandard.jar和jstl.jar文g拯到\WEB-INF\lib\?/p>
jakarta-taglibs-standard-1.1.1\tld\下的8个tldcd文g拷到"Working folder\WEB-INF\"?/p>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<taglib>
<taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri>
<taglib-location>/WEB-INF/fmt.tld</taglib-location>
</taglib>
<taglib-uri>http://java.sun.com/jstl/fmt-rt</taglib-uri>
<taglib-location>/WEB-INF/fmt-rt.tld</taglib-location>
</taglib>
<taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
<taglib-uri>http://java.sun.com/jstl/core-rt</taglib-uri>
<taglib-location>/WEB-INF/c-rt.tld</taglib-location>
</taglib>
<taglib-uri>http://java.sun.com/jstl/sql</taglib-uri>
<taglib-location>/WEB-INF/sql.tld</taglib-location>
</taglib>
<taglib-uri>http://java.sun.com/jstl/sql-rt</taglib-uri>
<taglib-location>/WEB-INF/sql-rt.tld</taglib-location>
</taglib>
<taglib-uri>http://java.sun.com/jstl/x</taglib-uri>
<taglib-location>/WEB-INF/x.tld</taglib-location>
</taglib>
<taglib-uri>http://java.sun.com/jstl/x-rt</taglib-uri>
<taglib-location>/WEB-INF/x-rt.tld</taglib-location>
</taglib>
</web-app>
6.建立一个名为test.jsp文g
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>试你的W一个用到JSTL 的网?lt;/title>
</head>
<body>
<c:out value="Ƣ迎试你的W一个用到JSTL 的网?/>
</br>你用的览器是Q?lt;/br>
<c:out value="${header['User-Agent']}"/>
<c:set var="a" value="David O'Davies" />
<c:out value="David O'Davies" escapeXml="true"/>
</body>
</html>
你用的览器是Q?br />
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) David O'Davies
]]>
在大多数情况?Z件处理函数返回false,可以防止默认的事件行?例如,默认情况下点M?lt;a>元素,面会蟩转到该元素href属性指定的?
Return False q当于l止W,Return True q当于执行W?/p>
onclick旉Q如果你指定的话Q以外还要触发一个默认事件就是执行页面的跌{。所以如?
你想取消对象的默认动作就可以return false。return false应用比较多的场合有:
<form name="form1" onsubmIT="return youfunction();">...... </form>
<a href="www.***.com" onclick="...;return false;">dddd </a> .
function test()
{
alert("test");
return false();
}
</script>
1Q?<a href='a.JSP' onclick='test();'>链接 </a>
2Q?<input type="button" onclick='test()' value="提交">
3Q?<form name="form1" onsubmIT="return test();">
内容
<input type="submIT" value="提交">
</form>
</body>
<iframe id=dolink src=about:blank style=display:none> </iframe>
点了上面的那个连接后Qdolink帧执行页面处理的事情Qxxxx.doQ?..然传递参数到服务器)Q页面不会蟩转?nbsp; .
<head>
<script language="javascript">
function verifyForm(){
var ass=document.getElementsByName("assetName");
if(ass[0].value.length==0){
alert("名称输入为空Q?);
return false;
}
alert("名称输入长度不能过15个字W!");
return false;
}
}
</script>
</head>
<body>
<form name="xx">
<input name="assetName" type="text"/>
<--Ҏreturn q回值的TRUE或FALSE 判定是否提交表单--->
<input type="submit" onclick="return verifyForm()"/>
</form>
</body>
</html>
下面是简单的一段代码Q?/p>
<form action="index.jsp" method="post" onsubmit="submitTest();;">
<INPUT value="www">
<input type="submit" value="submit">
</form>
<SCRIPT LANGUAGE="JavaScript">
<!--
function submitTest(); {
// 一些逻辑判断
return false;
}
//-->
</SCRIPT>
<INPUT value="www">
<input type="submit" value="submit">
</form>
<!--
function submitTest(); {
// 一些逻辑判断
return false;
}
//-->
</SCRIPT>
大家判断像上面的写法Q点击submit按钮该表单是否提交?
<form action="index.jsp" method="post" onsubmit="submitTest();;">
<form action="index.jsp" method="post" onsubmit="return submitTest();;">
onsubmit="
alert('haha');; // 内置函数
submitTest();; // 自定义函?nbsp;
alert(this.tagName);; // 用到了this关键?nbsp;
......(L多条语句);
return false;
"
alert('haha');; // 内置函数
submitTest();; // 自定义函?br />
alert(this.tagName);; // 用到了this关键?br />
......(L多条语句);
return false;
"
q当于
Form.prototype.onsubmit = function(); {
alert('haha');; // 内置函数
submitTest();; // 自定义函?nbsp;
alert(this.tagName);; // 用到了this关键?nbsp;
......(L多条语句);
return false;
};
alert('haha');; // 内置函数
submitTest();; // 自定义函?br />
alert(this.tagName);; // 用到了this关键?br />
......(L多条语句);
return false;
};
q样的话你就覆写?override)光认方法(默认q回trueQ?
大家注意到方法体中可以用thisq个关键词,q里即代表了<form>的对象实例?
<form action="index.jsp" method="post" onsubmit="submitTest();;">
Form.prototype.onsubmit = function(); {
submitTest();;
};
submitTest();;
};
在这里submitTest()虽然q回falseQ但我们只执行了此函敎ͼ没有对其l果q行M处理。?/p>
<form action="index.jsp" method="post" onsubmit="return submitTest();;">
overrideҎ的效果ؓQ?/p>
Form.prototype.onsubmit = function(); {
return submitTest();;
};
return submitTest();;
};
q样Q我们利用到了它的返回|辑ֈ了预期效果?
q样理解的话我想印象会深d多,׃易出错了
我们可以用Java里的思维方式来思考模拟JavaScript中的cM情况QJavaScript中基于prototype的面向对象技术也实是这样做的)Q但他们毕竟q是有本质上的区别,如Java是强cd的,有严格的语法限制Q而JavaScript是松散型的。象上述ҎQ?/p>
Form.prototype.onsubmit = function(); {
};
};
既可以有q回|又可以没有返回|在Java里是通不q的Q毕竟Java里面不能靠方法的q回g同来重蝲(overload)ҎQ而JavaScript中的重蝲要松散得多?
]]>
request.getParameter用的比较多,相对熟悉
request.getParameterValues(String name)是获得如checkboxc(名字相同Q但值有多个Q的数据?nbsp; 接收数组变量 Q如checkobxcd
request.getParameterQString nameQ是获得相应名的数据Q如果有重复的名Q则q回W一个的?. 接收一般变?Q如textcd
例:
1. 三个名字相同的text标签
<input type="text" name="test" value="1" />
<input type="text" name="test" value="2" />
<input type="text" name="test" value="3" />
request.getParameterValues("test") ----------------- [1, 2, 3]
request.getParameter("test") ------------------ 1
${paramValues.test}
${param.test}
2. checkbox
<input type="checkbox" name="habit" value="read">看书
<input type="checkbox" name="habit" value="movie">电媄
<input type="checkbox" name="habit" value="game">游戏
request.getParameterValues("habit")
二、与此相关的话题------隐含对象
1. JSP隐含对象(Implicit Object)
所谓隐含对象,是指当编写jsp|页Ӟ不必做Q何声明就可以直接使用的对象?JSP2.0定义了九个隐含对?/p>
request response pageContext session application out conifg page exception
q里只提一下request ?response 两个对象
request 对象表示客户端请求的内容Q比如我们从request中取得了用户输入的内容,实现了javax.servlet.http.HttpServletRequest接口
response对象表示响应客户端的l果?/p>
上面我们使用了request的两个方法getParameter ?getParameterValuesQ其实requestq有其他几个比较重要的方法,q里只涉及几个获取请求参数的Ҏ
String getParameter(String name) 取得name的参数?/p>
String[] getParameterValues(String name) 取得所有name的参数?/p>
Enumeration getParameterNames() 取得所有的参数名称
Map<String, String[]> getParameterMap() 取得request的所有参数的一个映?/p>
//
Returns a java.util.Map of the parameters of this request. Request parameters are extra information sent with the request. For HTTP servlets, parameters are contained in the query string or posted form data.
Returns:
an immutable java.util.Map containing parameter names as keys and parameter values as map values. The keys in the parameter map are of type String. The values in the parameter map are of type String array.
//
response{其他几个隐含对象也有非帔R要的w䆾Q有Z专门整理一下,宣扬一下它们的显赫C?/p>
2. EL隐含对象
EL即Experssion LanguageQ自JSP2.0后正式成为JSP的标准规范之一Q支持Servlet2.4/JSP2.0的Container也就相应的支持EL语法?
一个常见的形式如,<c:out value="${ 3 + 7 * 4}" />
EL的隐藏对象有11?PageContext PageScope RequestScope sessionScope applicationScope
param paramValues header headerValues cookie initParam
其中param ?paramValues卛_相应ServletRequest.getParameter(String name)和ServletRequest.getParameterValues(String name)
转蝲Q?a >http://blog.csdn.net/moreorless/archive/2009/05/18/4199677.aspx
1. Boolean(value):把D{换成BooleancdQ?/p>
2. Nnumber(value):把D{换成数字Q整型或点敎ͼQ?/p>
3. String(value):把D{换成字符丌Ӏ?/p>
我们先来看Boolean()Q在要{换的gؓ“臛_有一字符的字W串”?#8220;?的数?#8221;?#8220;对象”Q那么Boolean()返回trueQ如果要转换的gؓ“I字W串”?#8220;数字0”?#8220;undefined”Q?#8220;null”q些话,那么Boolean()会返回false。你可以用以下代码来试
var t1 = Boolean("");//q回false,I字W串
var t2 = Boolean("s");//q回trueQ非I字W串
var t3 = Boolean(0);//q回falseQ数?
var t3 = Boolean(1),t4 = Boolean(-1);//q回trueQ非0数字
var t5 = Boolean(null),t6 = Boolean(undefined);//q回false
var t7 = Boolean(new Object());//q回trueQ对?/p>
再来看看Number()QNumber()与parseInt()和parseFloat()cMQ它们区别在于Number()转换是整个|而parseInt()和parseFloat()则可以只转换开头的数字部分Q例如:Number("1.2.3"),Number("123abc")会返回NaNQ而parseInt("1.2.3")q回1、parseInt("123abc")q回123、parseFloat("1.2.3")q回1.2、parseFloat("123abc")q回123。Number()会先判断要{换的D否被完整的{换,然后再判断是调用parseInt()或parseFloat()。下面列了一些D用Number()之后的结果:
Number(false) 0
Number(true) 1
Number(undefined) NaN
Number(null) 0
Number("1.2") 1.2
Number("12") 12
Number("1.2.3") NaN
Number(new Object()) NaN
Number(123) 123
最后是String()Q这个以比较单了Q它可以把所有类型的数据转换成字W串Q如QString(false)---"false"、String(1)---"1"。它和toString()Ҏ有些不同Q区别在于:
var t1 = null;
var t2 = String(t1);//t2的倹{"null"
var t3 = t1.toString();//q里会报?br />
var t4;
var t5 = String(t4);//t5的倹{"undefined"
var t6 = t4.toString();//q里会报?/p>