Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1,$:$(“a”) 是一个jQuery选择器(selector),在这里,它选择所有的a标签,得到一个对象集合,$号是 jQuery “类”(jQuery “class”)的一个别称,因此$()构造了一个新的jQuery 对象(jQuery object)。相当于document.getElementsByTagName(“a”),这是一个函数!,$号是 jQuery “类”(jQuery “class”)的一个别称,因此$()构造了一个新的jQuery 对象(jQuery object)。函数 click() 是这个jQuery对象的一个方法,它绑定了一个单击事件到所有选中的标签(这里是所有的a标签),并在事件触发时执行了它所提供的alert方法.
(1):$(“div > p”) :找div下的p元素,如

one

two

three

会返回

two

$(“div > p”)[0]:第一个, $(“p”):直接找到段落P,即无符号.#时直接找页面的类型,又如$(“div”)
(2):$(document.body).background( “black” ); 即()可除了字符串之外,还可以是dom对象
(3):选择ID $(“#orderedlist”) 前面加个#号即可,(如CSS),相当于getElementById(“”),$(“#orderedlist li”) 打到orderdilist下的li元素
(4) : $(“.wrdLatest:last”);$得到一个集合,得到class为.wrdLatest的所有集合,last指示得到取出最后一个元素
(5):*用法 定义:匹配所有元素 多用于结合上下文来搜索。
实例:查看页所有元素的数量 代码:$(“*”).length; //点击按钮四将执行这句代码
(6)定义:将每一个选择器匹配到的元素合并后一起返回。你可以指定任意多个选择器,并将匹配到的元素合并到一个结果内。
:$(“.red_test,#btn_5”)

2, 执行方法:通过$得到元素,在方法中直接写function: $(“#orderedlist”).click( function(){$(“#orderedlist”).addClass(“red”);} )
每一个onXXX事件都有效,如onclick,onchange,onsubmit等,都有jQuery等价表示方法(onXXX,所以都改成了XXX,去掉了on)

3,为得到的元素增加CSS操作:
(1) CSS属性: $(this).css({‘background-color’ : ‘yellow’, ‘font-weight’ : ‘bolder’}); 得到某一属性:var color = $(this).css(“background-color”);
或:$(this).css(“color”,”blue”);
(2 ) addClass: $(this).addClass(“green”); removeClass
(3):height( ):得到宽度,height(100);设置宽度 类似还有:width( ), html()(得到元素内部html)
(4):$(“#checkbox_id”).attr(“checked”); //获取一个CheckBox的状态(有没有被选中,返回true/false)
$(“#checkbox_id”).attr(“checked”,true); //设置一个CheckBox的状态为选中(checked=true)
$(“.wrdLatest1:last”).attr(“id”)
$(“input[name=’checkbox_name’][checked]”); //选择被选中CheckBox元素的集合

4,遍历元素:each:$(“#orderedlist”).find(“li”).each(function(i) { $(this).html( $(this).html() + ” BAM! ” + i ); //$(“#orderedlist”).find(“li”)是一个集合,遍历之
each之前是一个集合。

5,查找元素:find,filter(),not() : $(“li”).not(“:has(ul)”).css(“border”, “1px solid black”);
选择上一个或者下一个元素:$(this).next(),parents(“p”)

6,jQuery常用技巧

1、关于页面元素的引用

通过jquery的$()引用元素包括通过id、class、元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用dom定义的方法。

2、jQuery对象与dom对象的转换

只有jquery对象才能使用jquery定义的方法。注意dom对象和jquery对象是有区别的,调用方法时要注意操作的是dom对象还是jquery对象。

普通的dom对象一般可以通过$()转换成jquery对象。

如:$(document.getElementById(”msg”))则为jquery对象,可以使用jquery的方法。

由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项,一般可通过索引取出。

如:$(”#msg”)[0],$(”div”).eq(1)[0],$(”div”).get()[1],$(”td”)[5]这些都是dom对象,可以使用dom中的方法,但不能再使用Jquery的方法。

以下几种写法都是正确的:

$(”#msg”).html();$(”#msg”)[0].innerHTML;$(”#msg”).eq(0)[0].innerHTML;$(”#msg”).get(0).innerHTML;
3、如何获取jQuery集合的某一项
对于获取的元素集合,获取其中的某一项(通过索引指定)可以使用eq或get(n)方法或者索引号获取,要注意,eq返回的是jquery对象,而 get(n)和索引返回的是dom元素对象。对于jquery对象只能使用jquery的方法,而dom对象只能使用dom的方法,如要获取第三个

元素的内容。有如下两种方法:

$(”div”).eq(2).html(); //调用jquery对象的方法$(”div”).get(2).innerHTML; //调用dom的方法属性
4、同一函数实现set和get
jQuery中的很多方法都是如此,主要包括如下几个:

$(”#msg”).html(); //返回id为msg的元素节点的html内容。$(”#msg”).html(”new content”);//将“new content” 作为html串写入id为msg的元素节点内容中,页面显示粗体的new content$(”#msg”).text(); //返回id为msg的元素节点的文本内容。$(”#msg”).text(”new content”);//将“new content” 作为普通文本串写入id为msg的元素节点内容中,页面显示new content$(”#msg”).height(); //返回id为msg的元素的高度$(”#msg”).height(”300″); //将id为msg的元素的高度设为300$(”#msg”).width(); //返回id为msg的元素的宽度$(”#msg”).width(”300″); //将id为msg的元素的宽度设为300$(”input”).val(”); //返回表单输入框的value值$(”input”).val(”test”); //将表单输入框的value值设为test$(”#msg”).click(); //触发id为msg的元素的单击事件$(”#msg”).click(fn); //为id为msg的元素单击事件添加函数
同样blur,focus,select,submit事件都可以有着两种调用方法。

5、集合处理功能对于jquery返回的集合内容无需我们自己循环遍历并对每个对象分别做处理,jquery已经为我们提供的很方便的方法进行集合的处理。

包括两种形式:

$(”p”).each(function(i){this.style.color=[‘#f00′,’#0f0′,’#00f’][ i ]})//为索引分别为0,1,2的p元素分别设定不同的字体颜色。$(”tr”).each(function(i) {this.style.backgroundColor=[‘#ccc’,’#fff’][i%2]})//实现表格的隔行换色效 果$(”p”).click(function(){alert($(this).html())})//为每个p元素增加了click事件,单击某个p 元素则弹出其内容
6、扩展我们需要的功能

$.extend({min: function(a, b){return a < b?a:b; },max: function(a, b){return a > b?a:b; }}); //为jquery扩展了min,max两个方法
使用扩展的方法(通过“$.方法名”调用):

alert(”a=10,b=20,max=”+$.max(10,20)+”,min=”+$.min(10,20));
7、支持方法的连写
所谓连写,即可以对一个jquery对象连续调用各种不同的方法。例如:

$(”p”).click(function(){alert($(this).html())}).mouseover(function(){alert(’mouse over event’)}).each(function(i){this.style.color=[‘#f00′,’#0f0′,’#00f’][ i ]});
8、操作元素的样式
主要包括以下几种方式:

$(”#msg”).css(”background”); //返回元素的背景颜色$(”#msg”).css(”background”,”#ccc”) //设定元素背景为灰色$(”#msg”).height(300); $(”#msg”).width(”200″); //设定宽高$(”#msg”).css({ color: “red”, background: “blue” });//以名值对的形式设定样式$(”#msg”).addClass(”select”); //为元素增加名称为select的class$(”#msg”).removeClass(”select”); //删除元素名称为select的class$(”#msg”).toggleClass(”select”); //如果存在(不存在)就删除(添加)名称为select的class

9、完善的事件处理功能
jQuery已经为我们提供了各种事件处理方法,我们无需在html元素上直接写事件,而可以直接为通过jquery获取的对象添加事件。$(”#msg”).click(function(){alert(”good”)}) //为元素添加了单击事件$(”p”).click(function(i){this.style.color= [‘#f00′,’#0f0′,’#00f’][ i ]})//为三个不同的p元素单击事件分别设定不同的处理
jQuery中几个自定义的事件:
(1)hover(fn1,fn2):一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法。当鼠标移动到一个匹配的元素上面时,会触发指定的第一个函数。当鼠标移出这个元素时,会触发指定的第二个函数。

//当鼠标放在表格的某行上时将class置为over,离开时置为out。$(”tr”).hover(function(){$(this).addClass(”over”);},function(){$(this).addClass(”out”);});
(2)ready(fn):当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。

$(document).ready(function(){alert(”Load Success”)})//页面加载完毕提示“Load Success”,相当于onload事件。与$(fn)等价
(3)toggle(evenFn,oddFn): 每次点击时切换要调用的函数。如果点击了一个匹配的元素,则触发指定的第一个函数,当再次点击同一元素时,则触发指定的第二个函数。随后的每次点击都重复对这两个函数的轮番调用。

// 每次点击时轮换添加和删除名为selected的class。$(”p”).toggle(function() {$(this).addClass(”selected”);},function(){$(this).removeClass(”selected”);});
(4)trigger(eventtype): 在每一个匹配的元素上触发某类事件。
例如:

$(”p”).trigger(”click”); //触发所有p元素的click事件
(5)bind(eventtype,fn),unbind(eventtype): 事件的绑定与反绑定
从每一个匹配的元素中(添加)删除绑定的事件。例如:

$(”p”).bind(”click”, function(){alert($(this).text());}); //为每个p元素添加单击事件$(”p”).unbind(); //删除所有p元素上的所有事件$(”p”).unbind(”click”) //删除所有p元素上的单击事件
10、几个实用特效功能
其中toggle()和slidetoggle()方法提供了状态切换功能。
如toggle()方法包括了hide()和show()方法。
slideToggle()方法包括了slideDown()和slideUp方法。

11、几个有用的jQuery方法

$.browser.浏览器类型:检测浏览器类型。有效参数:safari, opera, msie, mozilla。如检测是否ie:$.browser.isie,是ie浏览器则返回true。

$.each(obj, fn):通用的迭代函数。可用于近似地迭代对象和数组(代替循环)。如

$.each( [0,1,2], function(i, n){ alert( “Item #” + i + “: ” + n ); });
等价于:

var tempArr=[0,1,2];for(var i=0;i
也可以处理json数据,如

$.each( { name: “John”, lang: “JS” }, function(i, n){ alert( “Name: ” + i + “, Value: ” + n ); });
结果为:

Name:name, Value:JohnName:lang, Value:JS
$.extend(target,prop1,propN):用一个或多个其他对象来扩展一个对象,返回这个被扩展的对象。这是jquery实现的继承方式。
如:

代码
$.extend(settings, options);//合并settings和options,并将合并结果返回settings中,相当于options继承setting并将继承结 果保存在setting中。var settings = $.extend({}, defaults, options);//合并defaults和options,并将合并结果返回到setting中而不覆盖default内容。
可以有多个参数(合并多项并返回)

$.map(array, fn):数组映射。把一个数组中的项目(处理转换后)保存到到另一个新数组中,并返回生成的新数组。
如:

var tempArr=$.map( [0,1,2], function(i){ return i + 4; });tempArr内容为:[4,5,6]var tempArr=$.map( [0,1,2], function(i){ return i > 0 ? i + 1 : null; });tempArr内容为:[2,3]$.merge(arr1,arr2):合并两个数组并删除其中重复的项目。如:$.merge( [0,1,2], [2,3,4] ) //返回[0,1,2,3,4]$.trim(str):删除字符串两端的空白字符。如:$.trim(” hello, how are you? “); //返回”hello,how are you? ”

12、解决自定义方法或其他类库与jQuery的冲突
很多时候我们自己定义了$(id)方法来获取一个元素,或者其他的一些js类库如prototype也都定义了$方法,如果同时把这些内容放在一起就会引起变量方法定义冲突,Jquery对此专门提供了方法用于解决此问题。
使用jquery中的jQuery.noConflict();方法即可把变量$的控制权让渡给第一个实现它的那个库或之前自定义的$方法。之后应用 Jquery的时候只要将所有的$换成jQuery即可,如原来引用对象方法$(”#msg”)改为jQuery(”#msg”)。
如:jQuery.noConflict();// 开始使用jQueryjQuery(”div p“).hide();// 使用其他库的 $()$(”content”).style.display = ‘none’;


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

函数$.ajax的解析

函数:$.ajax(properties)
功能:用一个http请求访问一个远程页面
返回:XMLHttpRequest
参数:

(String)? url  请求地址;
(String)? type?? 请求类型(”GET”,”POST”);
(String)? dataType:从服务器端返回的数据类型(”xml”,”html”,”script”,”json”);
(Boolean)? ifModified:根据Last-Modified header判断返回内容是否改变;
(Number)? timeout:请求超时;
(Boolean)? global:对此次请求是否引起全局的ajax事件出来,默认true;
(Function)? error:错误处理函数;
(Function)? complete:请求完成后的处理函数;
(Object|String)? data:发送到服务器端的数据;
(String) contentType :默认”application/x-www-form-urlencoded”;
(Boolean)? processData :传输到服务器端的数据默认被转换到query string中以适合默认”application/x-www-form-urlencoded”方式,如果你想以DOMDocuments方式传输数据,就将该选项设为false;
(Boolean)? aysnc:是否异步传输,默认为true;
(Function)? beforeSend:请求前响应函数;

例子:(加载并且执行一个js文件)

jQuery Code

$.ajax({
type: “GET”,
url: “test.js”,
dataType: “script”
})

向服务器保存数据并且响应用户的动作完成

jQuery Code

$.ajax({
type: “POST”,
url: “some.php”,
data: “name=John&location=Boston”,
success: function(msg){
alert( “Data Saved: ” + msg );
}
});

jQuery Code

var html = $.ajax({
url: “some.php”,
async: false
}).responseText;

jQuery Code

var xmlDocument = [create xml document];
$.ajax({
url: “page.php”,
processData: false,
data: xmlDocument,
success: handleResponse
});

函数$.ajaxSetup的解析

函数:$.ajaxSetup(settings),$.ajaxTimeout(time)
功能:设定请求的一些参数
返回: undefined

例子:

$.ajaxSetup( {
url: “/xmlhttp/”,
global: false,
type: “POST”
} );
$.ajaxTimeout( 5000 );

函数$.get的解析

函数:$.get(url, params, callback),$.getIfModified(url, params, callback),
$.getJSON(url, params, callback),$.getScript(url, callback)
功能:get方式提交数据

例子:

$.get(”test.cgi”,
{ name: “John”, time: “2pm” },
function(data){
alert(”Data Loaded: ” + data);
});

函数$.post

函数:$.post(url, params, callback)

功能:post方式提交数据

例子:

$.post(”test.cgi”,
{ name: “John”, time: “2pm” },
function(data){
alert(”Data Loaded: ” + data);
});

函数ajaxComplete的解析

函数:ajaxComplete(callback),ajaxComplete(callback),ajaxSend(callback)

ajaxStart(callback),ajaxStop(callback),ajaxSuccess(callback)

功能:XMLHttpRequest状态改变过程中各个响应处理函数

例子:

$(”#msg”).ajaxComplete(function(request, settings){
$(this).append(”<li>Request Complete.</li>”);
});
$(”#msg”).ajaxSuccess(function(request, settings){
$(this).append(”<li>Successful Request!</li>”);
});
$(”#loading”).ajaxStop(function(){
$(this).hide();
});
$(”#msg”).ajaxSend(function(request, settings){
$(this).append(”<li>Starting request at ” + settings.url + “</li>”);
});

函数load的解析

函数:load(url, params, callback),loadIfModified(url, params, callback)

功能:加载html内容
返回:jQuery对象
参数:同get和post方式提交
例子:

代码

//jQuery Code
$(”#feeds”).load(”feeds.html”);
Before
<div id=”feeds”></div>
Result:
<div id=”feeds”><b>45</b> feeds found.</div>

//jQuery Code
$(”#feeds”).load(”feeds.html”,
{limit: 25},
function() { alert(”The last 25 entries in the feed have been loaded”); }

函数serialize的解析

函数:serialize()

功能:将表单元素和值序列化成string
返回:String
例子:

jQuery Code
$(”input[@type=text]“).serialize();
Before
<input type=’text’ name=’name’ value=’John’/>
<input type=’text’ name=’location’ value=’Boston’/
Result
name=John&location=Boston


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

jQuery-Selectors(选择器)的使用(一、基本篇)

本系列文章主要讲述jQuery框架的选择器(Selectors)使用方法,我将以实例方式进行讲述,以简单,全面为基础,不会涉及很深,我的学习方法:先入门,后进阶!
本系列文章分为:基本篇、层次篇、简单篇、内容篇、可见性篇、属性篇、子元素篇、表单篇、表单对象属性篇共9篇文章。
您对本系列文章有任何建议或意见请发送到邮箱:sjzlgt@qq.com
由于是第一次写技术性系列文章,难免会出错或代码BUG,欢迎指出,在此谢过!
您可以到jQuery官网来学习更多的有关jQuery知识。

1. #id用法
定义:根据给定的ID匹配一个元素。
返回值:Element
参数:id (String) : 用于搜索的,通过元素的 id 属性中给定的值
实例:将ID为”div_red”的DIV的边框改为红色
代码:$(“#div_red”).css(“border”,”red 2px solid”); //点击按钮一将执行这句代码
DIV ID=”div_red”

扩展:#id中的id可以是页面任何元素的id,如input,btuuon,div,table,span等等

2. element用法
定义:根据给定的元素名匹配所有元素。
返回值:Array<Element>
参数:element (String) : 一个用于搜索的元素。指向 DOM 节点的标签名。
实例:将页面<P>标记内的文字颜色改为红色
代码:$(“p”).css(“color”,”red”); //点击按钮二将执行这句代码

P标记1 ID=”p1″

P标记2 无ID

扩展:参数值可以是页面任何元素,如div,button,div,table,tr,td,p,h1,span,input

3. .class用法
定义:根据给定的类(样式名称)匹配元素。
返回值:Array<Element>
参数:class (String) 一个用以搜索的类(样式名称)。一个元素可以有多个类(样式名称),只要有一个符合就能被匹配到。
实例:将页面所有引用了”.red_test”样式的元素背景颜色改为蓝色
代码:$(“.red_test”).css(“background-color”,”blue”); //点击按钮三将执行这句代码
DIV ID=”div_red_1″ calss=”red_test”
DIV ID=”div_red_2″ 无class

SPAN ID=”span_red_1″ calss=”red_test”

扩展:可以看一下jQuery官网上Selectors/.class的实例。

4. *用法
定义:匹配所有元素 多用于结合上下文来搜索。
返回值:Array<Element>
实例:查看页所有元素的数量
代码:$(“*”).length; //点击按钮四将执行这句代码
扩展:可以看一下jQuery官网上Selectors/*的实例。

5. selector1,selector2,selectorN用法
定义:将每一个选择器匹配到的元素合并后一起返回。你可以指定任意多个选择器,并将匹配到的元素合并到一个结果内。
返回值:Array<Element>
参数:selector1 (Selector) : 一个有效的选择器 selector2 (Selector) : 另一个有效的选择器 selectorN (Selector) : (可选) 任意多个有效选择器
实例:将页面上所有引用名称为”li_test”样式的<Li>元素和ID为”li_red”的<Li>元素的边框改为绿色,宽度为5px
代码:$(“.red_test,#btn_5”).css(“border”,”5px solid Green”); //点击按钮五将执行这句代码

* Li
* Li id=”li_red”
* Li
* Li
* Li
* Li

jQuery选择器的使用灵活度非常高,至此,您可以利用本文中的四种选择器和上一篇中所讲的选择器组合并看效果,相信你会看到足以令你震撼的结果!
1. ancestor descendant用法
定?? 义:在给定的祖先元素下匹配所有的符合条件后代元素
返回值:Array
参?? 数:ancestor (Selector):任何有效选择器 descendant (Selector):用以匹配元素的选择器,并且它是第一个选择器的后代元素
实?? 例:将ID为”div_1″的DIV中所有的Input元素的背景色改为红色
代码: $(“div_1 input”).css(“background-color”,”red”); //点击按钮一将执行这句代码

DIV ID=”div_1″
DIV ID=”div_2″
DIV ID=”div_3″
DIV ID=”div_4″

DIV ID=”div_5″
DIV ID=”div_5_1″

注意:本实例请与第2个用法的实例作对比,看其控制范围!
2. parent > child用法
定?? 义:在给定的父元素下匹配所有的子元素
返回值:Array
参?? 数:parent (Selector):任何有效选择器 child (Selector): 用以匹配元素的选择器,并且它是第一个选择器的子元素
实?? 例:将ID为”div_a1″的DIV中所有的Input元素的背景色改为红色
代码: $(“#div_a1 > input”).css(“background-color”,”red”); //点击按钮二将执行这句代码

DIV ID=”div_a1″
DIV ID=”div_a2″
DIV ID=”div_a3″
DIV ID=”div_a4″

DIV ID=”div_a5″
DIV ID=”div_a5_1″
3. prev + next用法
定?? 义:匹配所有紧接在 prev 元素后的 next 元素
返回值:Array
参?? 数:prev (Selector):任何有效选择器 next (Selector):一个有效选择器并且紧接着第一个选择器
实?? 例:将ID为”div_b1″的DIV中所有span元素后紧跟的input元素的背景色改为红色
代码:$(“#div_b1 span + input”).css(“background-color”,”red”); //点击按钮三将执行这句代码

DIV ID=”div_b1″
span

DIV ID=”div_b2″
span
DIV ID=”div_b3″
span
DIV ID=”div_b4″
span

DIV ID=”div_b5″
DIV ID=”div_b5_1″ span

注意:第一个选择器我用了ancestor descendant用法,您也可以尝试其它用法。本例请与下面第4点的实例作对比并看效果!
4. prev ~ siblings用法
定?? 义:匹配 prev 元素之后的所有 siblings 元素
返回值:Array
参?? 数:prev (Selector):任何有效选择器 siblings (Selector):一个选择器,并且它作为第一个选择器的同辈
实?? 例:将ID为”div_c1″的DIV中所有与span元素之后平级的input元素的背景色改为红色
代码:$(“#div_c1 span ~ input”).css(“background-color”,”red”); //点击按钮四将执行这句代码

DIV ID=”div_c1″
span

DIV ID=”div_c2″
span
DIV ID=”div_c3″
span
DIV ID=”div_c4″
span

DIV ID=”div_c5″
DIV ID=”div_c5_1″ span

注意:DIV ID=”div_c1″ 和 ID=”div_c4″中的span元素前的input并未改变背景色,因为第二个选择器查找第一个选择器之后的元素

1. :first用法
定?? 义:匹配找到的第一个元素
返回值:Element
实?? 例:将ID为”ul_1″的ul中的第一个Li元素的背景色改为红色
代?? 码: $(“#ul_1 li:first”).css(“background-color”,”red”); //点击按钮一将执行这句代码

ul ID=”ul_1″

* Li 1
* Li 2
* Li 3
* Li 4
* Li 5
* Li 6
* Li 7
* Li 8

2. :last用法
定?? 义:匹配找到的最后一个元素
返回值:Element
实?? 例:将ID为”ul_2″的ul中的最后一个Li元素的背景色改为红色
代?? 码: $(“#ul_2 li:last”).css(“background-color”,”red”); //点击按钮二将执行这句代码

ul ID=”ul_2″

* Li 1
* Li 2
* Li 3
* Li 4
* Li 5
* Li 6
* Li 7
* Li 8

3. :not(selector)用法
定?? 义:去除所有与给定选择器匹配的元素
返回值:Array
参?? 数:selector (Selector) : 用于筛选的选择器
实?? 例:将ID为”ul_3″的ul中除最后一个Li元素以外的其他Li元素的背景色改为红色
代?? 码: $(“#ul_3 li:not(li:last)”).css(“background-color”,”red”); //点击按钮三将执行这句代码

ul ID=”ul_3″

* Li 1
* Li 2
* Li 3
* Li 4
* Li 5
* Li 6
* Li 7
* Li 8

扩展:你可以试试执行 $(“li:not(li:last)”).css(“background-color”,”red”); 这句代码,看看有什么效果
4. :even用法
定?? 义:匹配所有索引值为偶数的元素,从 0 开始计数
返回值:Array
实?? 例:将ID为”ul_4″的ul中索引为偶数的Li元素的背景色改为红色(注:索引从0开始)
代?? 码: $(“#ul_4 li:even”).css(“background-color”,”red”); //点击按钮四将执行这句代码

ul ID=”ul_4″

* Li 1
* Li 2
* Li 3
* Li 4
* Li 5
* Li 6
* Li 7
* Li 8

5. :odd用法
定?? 义:匹配所有索引值为奇数的元素,从 0 开始计数
返回值:Array
实?? 例:将ID为”ul_5″的ul中索引为奇数的Li元素的背景色改为红色(注:索引从0开始)
代?? 码: $(“#ul_5 li:odd”).css(“background-color”,”red”); //点击按钮五将执行这句代码

ul ID=”ul_5″

* Li 1
* Li 2
* Li 3
* Li 4
* Li 5
* Li 6
* Li 7
* Li 8

6. :eq(index)用法
定?? 义:匹配一个给定索引值的元素
返回值:Element
参?? 数:index (Number) : 从 0 开始计数
实?? 例:将ID为”ul_6″的ul中索引为3的Li元素的背景色改为红色(注:索引从0开始)
代?? 码: $(“#ul_6 li:eq(3)”).css(“background-color”,”red”); //点击按钮六将执行这句代码

ul ID=”ul_6″

* Li 1
* Li 2
* Li 3
* Li 4
* Li 5
* Li 6
* Li 7
* Li 8

7. :gt(index)用法
定?? 义:匹配所有大于给定索引值的元素
返回值:Array
参?? 数:index (Number) : 从 0 开始计数
实?? 例:将ID为”ul_7″的ul中索引值大于3的Li元素的背景色改为红色(注:索引从0开始)
代?? 码: $(“#ul_7 li:gt(3)”).css(“background-color”,”red”); //点击按钮七将执行这句代码

ul ID=”ul_7″

* Li 1
* Li 2
* Li 3
* Li 4
* Li 5
* Li 6
* Li 7
* Li 8

8. :lt(index)用法
定?? 义:匹配所有小于给定索引值的元素
返回值:Array
参?? 数:index (Number) : 从 0 开始计数
实?? 例:将ID为”ul_8″的ul中索引值小于3的Li元素的背景色改为红色(注:索引从0开始)
代?? 码: $(“#ul_8 li:lt(3)”).css(“background-color”,”red”); //点击按钮八将执行这句代码

ul ID=”ul_8″

* Li 1
* Li 2
* Li 3
* Li 4
* Li 5
* Li 6
* Li 7
* Li 8

9. :header用法
定?? 义:匹配如 h1, h2, h3之类的标题元素
返回值:Array
实?? 例:将ID为”div_1″的DIV中所有header(标题)元素的背景色改为红色
代?? 码: $(“#div_1 :header”).css(“background-color”,”red”); //点击按钮九将执行这句代码

DIV ID=”div_1″P标记

span标记
H1
H2
H3
H4
H5
H6

10. :animated用法
定?? 义:匹配所有正在执行动画效果的元素
返回值:Array
实?? 例:将ID为”div_2″的DIV中没有执行动画效果的元素的背景色改为红色
代?? 码: $(“#div_2 :not(:animated)”).css(“background-color”,”red”); //点击按钮十将执行这句代码
DIV id=”div_2″
span标记

1. :input用法 定?? 义:匹配所有 input, textarea, select 和 button 元素

2. :text用法 定?? 义:匹配所有的单行文本框

3. :password用法 定?? 义:匹配所有密码框


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

namespace=”/news”? “/news”是在地址栏中显示的路径,而非目录 如:http://pc-officea3:8080/news/index.action?
在jsp中用index.action 相当于 /news/index.action 要结合地址栏中名称空间来找action


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1, 美体学堂 在链接中执行action,根据action转到指定的页面
这样传的只是admin.id,即使此链接在一个form内,也不会传form内的数据
若想传form内的数据,那么唯一的方法就是让form提交
即: 删除

ps: form传参


这样提交时数据传的是form包裹的数据,在form外的是不会被提交的。

2,

若用 /manage/news/insert.action 且在tomcat 中path=“/” 则为绝对路径,否则代表当前目录下的manage文件夹下action


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

菜单
Project -> Build Automatically
Myeclipse中Tomcat的两种部署方式
一、在Myeclipse软件中部署

1、 在Myeclipse中,创建好工程后,在Myeclipse菜单栏中选择 Windows -> Preferences -> Myeclipse -> Tomcat5,选择”Enable”;Tomact Home Directory要选择你机器上Tomcat所安装的目录。然后,再Windows -> Preferences -> Myeclipse -> Tomcat5 ->JDK,确保这个是有对应的jdk版本,若没有,则通过”Add”添加其安装路径。ok

2、选择工具栏上的按钮,在”Project”中选择你要部署的工程,然后”Add”,再选择”Tomcat”,Finish。

3、 在工具栏上选择,启动Tomcat。

4、 运行程序。在IE中输入http://localhost:8080/aa/WebRoot/index.jsp(aa为工程名字)
二、在Tomcat的server.xml配置文件中部署

1、在Tomcat下,找到conf文件下的server.xml,打开。

2、在<Host>和</host>之间加上如下代码:

1
2 <Context path=”/虚拟目录名” docBase=”目标目录位置” debug=”0″ reloadable=”true” >
3 </Context>

(严格区分大小写,当path=””时,此时的虚拟目录直接为root—>http://localhost:8080/)
参数:

?path:表示在浏览器中输入http://localhost:8080/虚拟目录名

如:path=”/aa” 则浏览器中输入http://localhost:8080/aa/index.jsp

? path 就是提供一个前缀功能。
?docBase:表示你的程序包的物理绝对路径,默认的绝对路径是???? %tomcat_home%/webapps

workDir:?? 表示是缓存文件的放置地点,可以方便跨平台移植时不用重编译。这样,你的应用程序就可以放到硬盘上的任意地方了,临时文件的存放地点不设置的话,默认存放在tomcat\work\Catalina\\localhost之下\localhost

?reloadable :为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序;为false则不自动加载。

如:
<Context path=”/” reloadable=”true” docBase=”E:\workspace\.metadata\.plugins\com.genuitec.eclipse.easie.tomcat.myeclipse\tomcat\webapps\testAuto”
workDir=”E:\workspace\.metadata\.plugins\com.genuitec.eclipse.easie.tomcat.myeclipse\tomcat\webapps\testAuto” />

在地址栏中输入:? http://localhost:8080/index.jsp 即可运行 ,不用再加上工程名如: http://localhost:8080/myproject/index.jsp??? </Host>
reloadable=”true”会自动更新classes, jsp文件??? ps: docBase要精确到工程名才可
用myeclipse 更改类文件时,其会自动编译,而tomcat就会自动更新classes文件,

问题:IE中没有显示变化结果,原因:myeclipse自动编译还未完成,在部分是很快的。
默认为false, 只会自动更新jsp文件

ps:路径要与path设置的路径相同才可看到自动发生的变化


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1, commons-fileupload-1.2.1.jar
2, commons-io-1.3.2.jar
3, commons-logging-1.0.4.jar
4, freemarker-2.3.13.jar
5, ognl-2.6.11.jar
6, struts2-core-2.1.6.jar
7, xwork-2.1.2.jar


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

?将html元素值恢复成默认值,如 <input type=”text” value = “${news.title}”>之类。 若此文本框接收的是Action传来的值作为默认值,修改后,按下reset就会恢复成此默认值,而不是null


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

?须将表中所有的字段在jsp页面中接收,不想显示出来的就将其放入<input type=”hidden” value=”表字段”>
这样在提交时,更新Action的实体类,不会因未接收一个字段,使得此字段在实体类中为Null,覆盖了原有的数据


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1,在Action中:(ServletActionContext.getRequest().setAttribute
?????? 注:在配置action转发类型时要为dispatcher,不能为redirect, 因redirect忽略request的参数!
?2, 在页面中:${news.title}
?
forward 与 redirect 区别:

1.从地址栏显示来说
forward 地址栏还是原来的地址.
redirect 地址栏显示的是新的URL

2.从数据共享来说
forward:? 转发页面和转发到的页面可以共享request,session里面的数据.
redirect: 转发页面和转发到的页面不可以共享request里面的数据,但可以共享
session里面的数据.

3.应用
forward 是服务器内部的一种操作,只能在同一个Web应用程序内的资源之间转发
请求.
redirect 是服务器通知客户端,让客户端重新发起请求,不仅可以重定向到当前
应用程序的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,
甚至是使用绝对URL重定向到其他站点的资源.

4.从效率来说
forward:高.
redirect:低.

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容
读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从
哪里来的,所以它的地址栏还是原来的地址.

redirect是服务端根据逻辑,发送一个状态码,(不会传request,故其不能共用
request中的数据)告诉浏览器重新去请求那个地址.所以地址栏显示的是新的
URL.所以redirect等于客户端向服务器端发出两次request,同时也接受两次
response。


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

Action中只要定义一个变量,及set,get方法,那么当页面传来数据,变量名相同时就会调用Action的set方法进行赋值
在页面中接收Action数据时,会将Action的数据自动存入到request中,只要没设置type=”redirect”,那么在页面中直接用${userName}就会自动得到数据。

页面 ————request ———Action ————request —————页面


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1, Action中传送

方式(1) Collection actionMessage = new ArrayList ();
actionMessage.add(“输入有误!”);
setActionMessages(actionMessage);

方式(2)addActionMessage(“输入有误!”)

2,Struts.xml 中配置

success.jsp
/error.jsp

3,页面接收

注意:

如果将result标签的type属性设置为redirect则在Action即使使用了

addActionMessage(“输入有误!”);
setActionMessages(actionMessage);

在JSP页面也不能显示相应的信息


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1,WEB执行流程:发送jsp页面请求,Servlet接收,读取web.xml文件 ,据传来的路径转到对应的Servlet,进行操作
Servlet向jsp页面输出,会得到执行的是文字,图片之类而form指定的action因还没有submit,故此时不会得到执行
因图片是要读取加载的,故可在其中令其执行action
如:
即:页面显示时执行action

2,在Web.xml中配置:

index.action


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

相同的部分:
客户端发送jsp页面请求,Servlet接收,读取web.xml文件 ,据传来的路径转到对应的Servlet,进行操作,
不同在于操作时方法名是否固定,是否须extends框架提供的类
servlet要自定义接收参数,getParameter, 手动设置响应返回,
PrintWriter out = response.getWriter();
out.print( “

” );
而struts接收数据已由框架本身完成接受,而转到某一页面则可指定,不是手动再创建。

在web.xml三种框架的配置比较

ps: 任意指定,如可以都为*.action

1, Servlet

AutoServlet

com.servlet.AutoServlet



AutoServlet
/AutoServlet

AutoServlet extends HttpServlet,实现其get,post方法
当jsp路径为/AutoServlet时执行get方法,
可看出:所有的操作类都要在web.xml中配置,不能集上管理这些servlet,而Struts分别提供了struts-config.xml,struts.xml集中管理操作类的文件

执行的方法固定,get,set

2,Struts1.x

action
org.apache.struts.action.ActionServlet
config /WEB-INF/struts-config.xml


action
*.do

当页面传来*.do时执行action,这是Struts系统提供的Servlet,它会读取中所配置的
/WEB-INF/struts-config.xml文件,进一步找到具体的action进行操作。

action 方法名为execute, 若其它任意,不过必须继承Struts1.x提供的action类

3,Struts2.0

struts2

org.apache.struts2.dispatcher.FilterDispatcher



struts2
*.action

当页面传来*.action时执行FilterDispatcher,它会读取/src/struts.xml的文件,从而执行对应的类
action方法名任意,类继承谁没有限制,也就是说任何类都可以成为一个Struts1.x中的action

框架名称 是否继承特定类 方法名 集中管理action类文件

servlet 是,HttpServlet get, post 无, 一切都在web.xml中配置

struts1.x 是,Action,DispatchAction execute, 任意 有,struts-config.xml

struts2.0 任意 任意 有,struts.xml

struts1.x struts2.0 细节区别:

(1), 类形式:struts2.0的action 类似于struts1.x中的DispatchAction 不过前者类随意继承,没有限制,而后者强制要继承自Dispath才可执行.
(2), 运行: struts2.0的action可直接在 地址栏中用 http://pc-officea3:8080/testWeb/index.action.执行测试,而struts1.x必须要有jsp页面才可
(3), 测试:struts1.xservlet API execute方法I execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)暴露了servlet AP,在测试时须在jsp页面中提交,生成request才可进行, 而struts2.0 方法名是任意的,不限制的如insert()无形参,可直接用JUNITT等生成对象,用 myobject.set来给值,此步相当于jsp页面提交,最大的好处是不用转到jsp页面,生成request才能得到执行,因struts2.0 action是任意类,故可如一般类一样进行测试!!


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现 常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象
ps: pojo , 简单的Java对象(Plain Ordinary Java Objects)实际就是普通JavaBeans,使用POJO名称是为了避免和 EJB混淆起来, 而且简称比较直接.

Action类没有直接与request,response打交道,已经与Servlet API完全分离,可通过方法名形参看出来,但我们在实现业务逻辑处理时经常需要访问Servlet中的对象,如Session、Application等。Struts2.0 提供了一个名字为ActionContext的类,在Action中可以通过该类获得Servlet API。

ActionContext是一个Action的上下文对象,Action运行期间所用到的数据都保存在ActionContext中(如Session,客户端提交的参数等信息)。在每次执行Action之前都会创建新的ActionContext,ActionContext是线程安全的,也就是说在同一个线程里ActionContext里的属性是唯一的,这样我的Action就可以在多线程中使用。

在Action中可以通过下面的代码来创建和使用ActionContext类,关于该类的方法介绍如下所示:
ActionContext ac=ActionContext.getContext();

以下是ActionContext类的常用方法
1.Object get(Object key) :通过参数key来查找当前ActionContext中的值
2.Map getApplication() :返回一个Application级的Map对象
3.Static ActionContext getContext() :获得当前线程的ActionContext对象
4.Map getParameters() :返回一个包含所有HttpServletRequest参数信息的Map对象

5.Map getSession() :返回一个Map类型的HttpSession对象

我们取得的session却是Map类型的对象,这是为什么?框架将与Web相关的很多对象重新进行了包装,比如这里就将 HttpSession对象重新包装成了一个Map对象,供我们的Action使用,而不用直接和底层的HttpSession打交道。也正是框架的包装,让我们的Actoion可以完全的和Web层解藕。

6.Void put(Object key,Object value) :向当前ActionContext对象中存入名值对信息
7.Void setApplication(Map application) :设置Application上下文
8.Void setSession(Map session) :设置一个Map类型的Session值

如果我们的Action需要直接与JavaServlet的HttpSession、HttpServletRequest等一些对象进行操作,我们又该如何处理?请看下面的ServletActionContext。

ServletActionContext
这个类直接继承了我们上面介绍的ActionContext,它提供了直接与JavaServlet相关对象访问的功能

1、取得HttpServletRequest对象:

HttpServletRequest request = ServletActionContext. getRequest();

2、取得HttpSession对象:
HttpSession session = ServletActionContext. getRequest().getSession();

ServletActionContext和ActionContext有着一些重复的功能,在我们的Action中,该如何去抉择呢?我们遵循的原则是:如果ActionContext能够实现我们的功能,那最好就不要使用ServletActionContext,让我们的Action尽量不要直接去访问JavaServlet的相关对象。在使用ActionContext时有一点要注意:不要在Action的构造函数里使用 ActionContext.getContext(),因为这个时候ActionContext里的一些值也许没有设置,这时通过 ActionContext取得的值也许是null。


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1, dispatcher -forward 转到指定的jsp页面
2,redirect 重定向到jsp页面或action
3,chain 由当前action转到另一action, 形成一个action链,彼些间共享一个ActionContext,在一个action中设置ActionContext属性,可被其它action共享。

redirect 与 dispatcher的区别与 reidrect,forward相似

一、dispatcher

(1)为缺省的result类型,一般情况下我们在struts.xml会这么写:
Xml代码

1. /main.jsp

/main.jsp

以上写法使用了两个默认,其完整的写法为:
Xml代码

1.
2. /maini.jsp 3.

/maini.jsp

第一个默认:type=”dispatcher”;第二个默认:设置的为location参数,location只能是页面,不能是另一个action(可用type=”chain”解决)。

(2)实现方式

从doExecute方法看出,有三个出口(finalLocation为要跳转的地址):

*

pageContext.include(finalLocation);
*

dispatcher.forward(request, response); (dispatcher是根据finalLocation创建的)
*

dispatcher.include(request, response);

而我们知道,forward与include都是转发到context内部的资源。

二、redirect

(1)可以重定向到一个页面,另一个action或一个网址。
Xml代码

1. aaa.jsp
2. bbb.action
3. www.baidu.com

aaa.jsp
bbb.action
www.baidu.com

(2)实现方式:

查看doExecute方法,只有一个出口:

response.sendRedirect(finalLocation);

sendRedirect是重定向,是重新产生一个HTTP请求到服务器,故重定向后其原来所在的action上下文就不可用了。

三、chain

(1)主要用于把相关的几个action连接起来,共同完成一个功能。
Xml代码


step2 //注:是step2而不是step2.action


finish.jsp

(2)实现方式:

查看execute()方法,主要思想如下:

// 根据Action名称finalActionName及要调用的方法finalMethodName来new一个代理对象proxy,并执行之
Java代码

proxy = actionProxyFactory.createActionProxy(finalNamespace,
finalActionName, finalMethodName, extraContext);
proxy.execute();

(3)多个action间数据的传递

主要有两种方式:

1)由于处于chain中的action属于同一个http请求,action处理完后转发到一个action,请求参数全部丢失,action处理结果不会丢失,共享一个ActionContext,故可以在上下文中获取,在页面上可以直接使用。手动获取的
方法如下:

Java代码

HttpServletRequest request = ServletActionContext.getRequest();
String s=(String)request.getAttribute(“propName”);

2)实现ModelDriven接口

在Step1Action中,加入getModel:
Java代码

1. public Object getModel() {
2. return message;
3. }

public Object getModel() {
return message;
}

在Step2Action中,加入setModel:
Java代码

1. public void setModel(Object o){
2. System.out.println(“message is:”+o);
3. }

public void setModel(Object o){
System.out.println(“message is:”+o);
}

注意,setModel的调用先于execute()方法后于构造方法。


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

一、Struts2.0的创建
1),添加jar包
?? 1, commons-fileupload-1.2.1.jar
?? 2, commons-io-1.3.2.jar
?? 3, commons-logging-1.0.4.jar
?? 4, freemarker-2.3.13.jar
?? 5, ognl-2.6.11.jar
?? 6, struts2-core-2.1.6.jar
?? 7, xwork-2.1.2.jar
注:要与Spring整合,让Spring托管Struts的Action,那么需要添加Struts2.0的
???????? struts2-spring-plugin-2.1.6.jar
2),创建struts.xml,放在src目录下,并添加相应的action
? <?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE struts PUBLIC
“-//Apache Software Foundation//DTD Struts Configuration 2.0//EN”
http://struts.apache.org/dtds/struts-2.0.dtd“>
<struts>??

<include file=”struts-default.xml”/>
<package name=”com.login”? extends=”struts-default”>
?<action name=”login” method=”login”>???
?<result name=”success” type=”redirect”>success.jsp</result>
</action>???
</package>
??? </struts>
3), 在web.xml加入filter,
????????????? (注:用过滤器的原因是:要对传来的各种url进行分类,转向,即过滤。相似的还有servlet
?????????????????????? 而Spring用监听器,listen,当监听到action创建时就注入属性)
<filter>
<filter-name>struts2</filter-name>
<filter-class>
??? org.apache.struts2.dispatcher.FilterDispatcher? //默认就会读取src下的struts.xml
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
4), 做jsp即可


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

注:要与Spring整合,让Spring托管Struts的Action,那么需要添加Struts2.0的
????? struts2-spring-plugin-2.1.6.jar
注入效果:action的属性对象会自动被Spring创建,在action中只需引用即可

1,添加Spring能力
选中以下及自动关联的类库
String 2.0 Core Libraries
String 2.0 Persistence JDBC Libraries
String 2.0 Web Libraries

2, 在web.xml添加spring监听器
<listener>
<listener-class>
??? org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

注:若不用Spring来为Struts的action进行自动属性注入,那么就不必为spring配置监听器,且也不用导入
struts2-spring-plugin-2.1.6.jar, 直接在代码中进行手动注入:
?????????? ApplicationContext context = new ClassPathXmlApplicationContext( “applicationContext.xml” );
????????? ComeAction comeAction = (ComeAction) context.getBean( “comeAction” );
可看出在web.xml配置的多为struts与servlet,因为它们要拦截页面请求的url进行转向,而配置
?? Spring监听器的原因是为了监听Struts action的建立并为其动态注入属性。

3, 将applicationContext.xml放置在web-inf下, 名字可任意如ac.xml,ab.xml
不过要在web.xml指定??
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/a*.xml </param-value>
</context-param>
注:<context-param>也可不加,默认读取的是/WEB-INF/下的applicationContext.xml,只要?????? applicationContext.xml放置在web-inf下即可。

4, 配置 applicationContext.xml, 创建相应的注入属性
如:loginAction有一个userDao属性,设置了get,set方法,那么在 applicationContext.xml,配置:
??? <bean id=”userDao”>
???? </bean>
注:1,loginAction中的属性名userDao一定要与applicationContext.xml中的bean的id相同!!!!!
这样Spring才能自动注入action的属性。指的是与setUserDao()中userDao相同,变量名不必要相同。
因为在注入时,会根据配置文件中的userDao调用action的setUserDao方法,只要此方法存在即可!!
???? ( 以下2,3可不用配 )
?????? 2, 在struts.properties中设置struts.objectFactory属性值
?????????? struts.objectFactory = spring?
????????? 或者是在XML文件中进行常量配置
?????????? struts.xml???? <constant name=”struts.objectFactory” value=”spring” />?
???? 3, 在struts.properties中指定注入方式。name 按照你的action的属性的名字和Spring里的bean的名字匹配,如果匹配就自动装配。这是缺省的
type 按照你的action的属性的类型,在Spring注册的bean中查找,如果相同就自动装配。这需要你在Spring中仅注册了一个此类型的bean
auto Spring会试图自动监测来找到最好的方法自动装配你的action
constructor Spring会自动装配bean的构造函数的参数
ps :
在action的class指定具体的类,Spring自动完成属性的注入,
在action的class指定bean id, Spring托管整个action生命周期.
1, 属性注入:
(1) struts.xml中配置:
?<action name=”login” method=”login”>???
<result name=”success” type=”redirect”>success.jsp</result>
</action>
(2) applicationContext.xml中配置
?在applicationContext.xml中配置此action的属性,要注意的是bean id 要与action内的属性名相同,不用为???????????????? LoginAction本身定义bean id.
这样Spring就只负责action属性的注入,

2, 所有注入:?? 让spring不仅负责action属性的创建,还负责action本身的创建.
? (1) struts.xml中配置:??
?? struts.xml中配置:
? <action name=”login” method=”login”>???
<result name=”success” type=”redirect”>success.jsp</result>
?</action>
? class为Spring中applicationContext.xml中的bean id
?(2) applicationContext.xml中配置
??? 配置loginAction的bean即可.
所有注入的好处: 结合aop,可完成对action执行具体方法时进行拦截,进行日志记录等.


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

<!DOCTYPE struts PUBLIC “-//Apache Software Foundation//DTD Struts

Configuration 2.0//EN” “http://struts.apache.org/dtds/struts-2.0.dtd” >
<struts>

<!– include节点是struts2中组件化的方式 可以将每个功能模块独立到一

个xml配置文件中 然后用include节点引用 –>
<include file=”struts-default.xml”></include>
<!– package提供了将多个Action组织为一个模块的方式
?package的名字必须是唯一的 package可以扩展 当一个package扩展自
?另一个package时该package会在本身配置的基础上加入扩展的package
?的配置 父package必须在子package前配置
?name:package名称
?extends:继承的父package名称
?abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false
namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空

间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action?? –>

<package name=”com.kay.struts2″ extends=”struts-default” namespace=”/test”>
<interceptors>
??? <!– 定义拦截器
???????? name:拦截器名称
???????? class:拦截器类路径
???? –>
??? <interceptor name=”timer”

class=”com.kay.timer”></interceptor>
??? <interceptor name=”logger”

class=”com.kay.logger”></interceptor>
??? <!– 定义拦截器栈 –>
??? <interceptor-stack name=”mystack”>
??????? <interceptor-ref name=”timer”></interceptor-ref>
??????? <interceptor-ref name=”logger”></interceptor-ref>
??? </interceptor-stack>
</interceptors>

<!– 定义默认的拦截器 每个Action都会自动引用
? 如果Action中引用了其它的拦截器 默认的拦截器将无效 –>
<default-interceptor-ref name=”mystack”></default-interceptor-

ref>
<!– 全局results配置 –>
<global-results>
??? <result name=”input”>/error.jsp</result>
</global-results>

<!– Action配置 一个Action可以被多次映射(只要action配置中的name

不同)
????? name:action名称
????? class: 对应的类的路径
method: 调用Action中的方法名
–>
<action name=”hello”

class=”com.kay.struts2.Action.LoginAction”>
??? <!– 引用拦截器
???????? name:拦截器名称或拦截器栈名称
???? –>
??? <interceptor-ref name=”timer”></interceptor-ref>

??? <!– 节点配置
???????? name : result名称 和Action中返回的值相同
???????? type : result类型 不写则选用superpackage的type struts

-default.xml中的默认为dispatcher
???? –>
?<result name=”success” type=”dispatcher”>/talk.jsp</result>
?<!– 参数设置
????? name:对应Action中的get/set方法
?–>
?<param name=”url”>http://www.sina.com</param>
</action>
</package>
</struts>
ps: package? extends
<package name=”com.manage.checkLogin” extends=”struts-default”>
….
</package>

<package name=”com.manage.news” namespace=”/manage/news” extends=”com.manage.checkLogin”>
….
</package>

当多个配置文件都要引用一个package时,可将其放入一配置文件中,在struts.xml include其它文件的同时,include此文件,接着在各配置文件中直接extends此包即可。