Struts2的四种theme类型

struts2 中有四种 theme 类型:

simple theme A minimal theme with no “bells and whistles”

xhtml theme The default theme that uses common HTML practices

css_xhtml theme The xhtml theme re-implemented using strictly CSS for layout

ajax theme A theme based on the xhtml theme that provides advanced AJAX features

除了simple theme之外,其他的theme都会自动为你生成layout,例如

<s:form>

<s:submint />

</s:form>

会生成如下的HTML片段:

<form>

<table>

<tr>

<td><input type=”submit” ../>

</tr>

</table>

</form>

所以如果使用这三种类型的theme不需要使用table定layout。

如果使用simple的theme才需要使用table定layout。

但是按照你的想法,使用前三种theme无法把submit和reset放在同一个tr中(即无法放在同一行)

解决方法:

1 使用simple theme , 但是这样子的话你无法使用ajax的一些特性,需要自己编写ajax的特性。

2 基于xhtml theme自己重新写一个theme,但是难度会大一点。

 

****************************************************************

struts.xml:

 <constant name=”struts.ui.theme” value=”css_xhtml” />

jsp:

<s:form namespace=”/admin/category” id=”deleteCarSeriesForm” action=”deleteCarSeries” method=”post”  theme=”launch”>

使用wget下载整个网页

wget -r -p -k -np -t 5 http://hao.360.cn

 

 

虽然很好用,但是还是有不少局限性.

 

1. 不能解析CSS文件中 包含的图片信息 例如使用 @import 或者url等等导入的东西

 

2. 不能解析JS中动态写入的资源文件,对于Ajax载入的根本就无从弹起,可能模仿的不是http请求有关

 

3. 她是从取出来的数据流中去解析文件内引用的资源信息,而非使用Dom解析的方式来获取信息

 

4. 中文资源太少

 

优势:

 

1. 开源,免费 [切记: 开源 != 免费]

 

2. 实用,功能强劲 大多数系统平台上都有实现.

 

3. 可以与其他的工具无缝集成.通过PHP可以实现很多东西.我一般都是使用PHP来取代原始的shell脚本.

 

4. 单文件,很小. 可以作为自己的工具箱中的一员 

 

 

注意:

 

1. Wget1.5的windows版本不支持-p选项,我提供的这个版本是1.11.4,提供-p选项

 

jquery一些常用方法

Attribute:
$(”p”).addClass(css中定义的样式类型); 给某个元素添加样式
$(”img”).attr({src:”test.jpg”,alt:”test Image”}); 给某个元素添加属性/值,参数是map
$(”img”).attr(”src”,”test.jpg”); 给某个元素添加属性/值
$(”img”).attr(”title”, function() { return this.src }); 给某个元素添加属性/值
$(”元素名称”).html(); 获得该元素内的内容(元素,文本等)
$(”元素名称”).html(”<b>new stuff</b>”); 给某元素设置内容
$(”元素名称”).removeAttr(”属性名称”) 给某元素删除指定的属性以及该属性的值
$(”元素名称”).removeClass(”class”) 给某元素删除指定的样式
$(”元素名称”).text(); 获得该元素的文本
$(”元素名称”).text(value); 设置该元素的文本值为value
$(”元素名称”).toggleClass(class) 当元素存在参数中的样式的时候取消,如果不存在就设置此样式
$(”input元素名称”).val(); 获取input元素的值
$(”input元素名称”).val(value); 设置input元素的值为value
Manipulation:
$(”元素名称”).after(content); 在匹配元素后面添加内容
$(”元素名称”).append(content); 将content作为元素的内容插入到该元素的后面
$(”元素名称”).appendTo(content); 在content后接元素
$(”元素名称”).before(content); 与after方法相反
$(”元素名称”).clone(布尔表达式) 当布尔表达式为真时,克隆元素(无参时,当作true处理)
$(”元素名称”).empty() 将该元素的内容设置为空
$(”元素名称”).insertAfter(content); 将该元素插入到content之后
$(”元素名称”).insertBefore(content); 将该元素插入到content之前
$(”元素”).prepend(content); 将content作为该元素的一部分,放到该元素的最前面
$(”元素”).prependTo(content); 将该元素作为content的一部分,放content的最前面
$(”元素”).remove(); 删除所有的指定元素
$(”元素”).remove(”exp”); 删除所有含有exp的元素
$(”元素”).wrap(”html”); 用html来包围该元素
$(”元素”).wrap(element); 用element来包围该元素
Traversing:
add(expr)
add(html)
add(elements)
children(expr)
contains(str)
end()
filter(expression)
filter(filter)
find(expr)
is(expr)
next(expr)
not(el)
not(expr)
not(elems)
parent(expr)
parents(expr)
prev(expr)
siblings(expr)

Core:
$(html).appendTo(”body”) 相当于在body中写了一段html代码
$(elems) 获得DOM上的某个元素
$(function(){……..}); 执行一个函数
$(”div > p”).css(”border”, “1px solid gray”); 查找所有div的子节点p,添加样式
$(”input:radio”, document.forms[0]) 在当前页面的第一个表单中查找所有的单选按钮
$.extend(prop) prop是一个jquery对象,
举例:
jQuery.extend({
min: function(a, b) { return a < b   a : b; },
max: function(a, b) { return a > b   a : b; }
});
jQuery( expression, [context] ) —$( expression, [context]); 在默认情况下,$()查询的是当前HTML文档中的DOM元素。

each( callback ) 以每一个匹配的元素作为上下文来执行一个函数
举例:1
$(”span”).click(function){
$(”li”).each(function(){
$(this).toggleClass(”example”);
});
});
举例:2
$(”button”).click(function () {
$(”div”).each(function (index, domEle) {
// domEle == this
$(domEle).css(”backgroundColor”, “yellow”);
if ($(this).is(”#stop”)) {
$(”span”).text(”Stopped at div index #” + index);
return false;
}
});
});


jQuery Event:

ready(fn); $(document).ready()注意在body中没有onload事件,否则该函数不能执行。在每个页面中可以
有很多个函数被加载执行,按照fn的顺序来执行。
bind( type, [data], fn ) 为每一个匹配元素的特定事件(像click)绑定一个或多个事件处理器函数。可能的事件属性有:blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove,
mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress,
keyup, error
one( type, [data], fn ) 为每一个匹配元素的特定事件(像click)绑定一个或多个事件处理器函数。在每个对
象上,这个事件处理函数只会被执行一次。其他规则与bind()函数相同。

trigger( type, [data] ) 在每一个匹配的元素上触发某类事件。
triggerHandler( type, [data] ) 这一特定方法会触发一个元素上特定的事件(指定一个事件类型),同时取消浏览器对此事件的默认行动
unbind( [type], [data] ) 反绑定,从每一个匹配的元素中删除绑定的事件。
$(”p”).unbind() 移除所有段落上的所有绑定的事件
$(”p”).unbind( “click” ) 移除所有段落上的click事件
hover( over, out ) over,out都是方法, 当鼠标移动到一个匹配的元素上面时,会触发指定的第一个函数。当鼠标移出这个元素时,会触发指定的第二个函数。
$(”p”).hover(function(){
$(this).addClass(”over”);
},
function(){
$(this).addClass(”out”);
}
);

toggle( fn, fn ) 如果点击了一个匹配的元素,则触发指定的第一个函数,当再次点击同一元素时,则触发指定的第二个函数。
$(”p”).toggle(function(){
$(this).addClass(”selected”);
},
function(){
$(this).removeClass(”selected”);
}
);

元素事件列表说明
注:不带参数的函数,其参数为可选的 fn。jQuery不支持form元素的reset事件。
事件 描述 支持元素或对象
blur( ) 元素失去焦点 a, input, textarea, button, select, label, map, area
change( ) 用户改变域的内容 input, textarea, select
click( ) 鼠标点击某个对象 几乎所有元素
dblclick( ) 鼠标双击某个对象 几乎所有元素
error( ) 当加载文档或图像时发生某个错误 window, img
focus( ) 元素获得焦点 a, input, textarea, button, select, label, map, area
keydown( ) 某个键盘的键被按下 几乎所有元素
keypress( ) 某个键盘的键被按下或按住 几乎所有元素
keyup( ) 某个键盘的键被松开 几乎所有元素
load( fn ) 某个页面或图像被完成加载 window, img
mousedown( fn ) 某个鼠标按键被按下 几乎所有元素
mousemove( fn ) 鼠标被移动 几乎所有元素
mouseout( fn ) 鼠标从某元素移开 几乎所有元素
mouseover( fn ) 鼠标被移到某元素之上 几乎所有元素
mouseup( fn ) 某个鼠标按键被松开 几乎所有元素
resize( fn ) 窗口或框架被调整尺寸 window, iframe, frame
scroll( fn ) 滚动文档的可视部分时 window
select( ) 文本被选定 document, input, textarea
submit( ) 提交按钮被点击 form
unload( fn ) 用户退出页面 window

JQuery Ajax 方法说明:

load( url, [data], [callback] ) 装入一个远程HTML内容到一个DOM结点。
$(”#feeds”).load(”feeds.html”); 将feeds.html文件载入到id为feeds的div中
$(”#feeds”).load(”feeds.php”, {limit: 25}, function(){
alert(”The last 25 entries in the feed have been loaded”);
});

jQuery.get( url, [data], [callback] ) 使用GET请求一个页面。
$.get(”test.cgi”, { name: “John”, time: “2pm” }, function(data){
alert(”Data Loaded: ” + data);
});

jQuery.getJSON( url, [data], [callback] ) 使用GET请求JSON数据。
$.getJSON(”test.js”, { name: “John”, time: “2pm” }, function(json){
alert(”JSON Data: ” + json.users[3].name);
});

jQuery.getScript( url, [callback] ) 使用GET请求javascript文件并执行。
$.getScript(”test.js”, function(){
alert(”Script loaded and executed.”);
});
jQuery.post( url, [data], [callback], [type] ) 使用POST请求一个页面。

ajaxComplete( callback ) 当一个AJAX请求结束后,执行一个函数。这是一个Ajax事件
$(”#msg”).ajaxComplete(function(request, settings){
$(this).append(”<li>Request Complete.</li>”);
});
ajaxError( callback ) 当一个AJAX请求失败后,执行一个函数。这是一个Ajax事件
$(”#msg”).ajaxError(function(request, settings){
$(this).append(”<li>Error requesting page ” + settings.url + “</li>”);
});

 

ajaxSend( callback ) 在一个AJAX请求发送时,执行一个函数。这是一个Ajax事件
$(”#msg”).ajaxSend(function(evt, request, settings){
$(this).append(”<li<Starting request at ” + settings.url
+ “</li<”);
});

ajaxStart( callback ) 在一个AJAX请求开始但还没有激活时,执行一个函数。这是一个Ajax事件
当AJAX请求开始(并还没有激活时)显示loading信息
$(”#loading”).ajaxStart(function(){
$(this).show();
});

ajaxStop( callback ) 当所有的AJAX都停止时,执行一个函数。这是一个Ajax事件
当所有AJAX请求都停止时,隐藏loading信息。
$(”#loading”).ajaxStop(function(){
$(this).hide();
});

ajaxSuccess( callback ) 当一个AJAX请求成功完成后,执行一个函数。这是一个Ajax事件
当AJAX请求成功完成时,显示信息。
$(”#msg”).ajaxSuccess(function(evt, request, settings){
$(this).append(”<li>Successful Request!</li>”);
});

jQuery.ajaxSetup( options ) 为所有的AJAX请求进行全局设置。查看$.ajax函数取得所有选项信息。
设置默认的全局AJAX请求选项。
$.ajaxSetup({
url: “/xmlhttp/”,
global: false,
type: “POST”
});
$.ajax({ data: myData });

serialize( ) 以名称和值的方式连接一组input元素。实现了正确表单元素序列
function showValues() {
var str = $(”form”).serialize();
$(”#results”).text(str);
}
$(”:checkbox, :radio”).click(showValues);
$(”select”).change(showValues);
showValues();

serializeArray( ) 连接所有的表单和表单元素(类似于.serialize()方法),但是返回一个JSON数据格式。
从form中取得一组值,显示出来
function showValues() {
var fields = $(”:input”).serializeArray();
alert(fields);
$(”#results”).empty();
jQuery.each(fields, function(i, field){
$(”#results”).append(field.value + ” “);
});
}
$(”:checkbox, :radio”).click(showValues);
$(”select”).change(showValues);
showValues();

JQuery Effects 方法说明

show( ) 显示隐藏的匹配元素。
show( speed, [callback] ) 以优雅的动画显示所有匹配的元素,并在显示完成后可选地触发一个回调函数。
hide( ) 隐藏所有的匹配元素。
hide( speed, [callback] ) 以优雅的动画隐藏所有匹配的元素,并在显示完成后可选地触发一个回调函数
toggle( ) 切换元素的可见状态。如果元素是可见的,切换为隐藏的;如果元素是隐藏的,
切换为可见的。
slideDown( speed, [callback] ) 通过高度变化(向下增大)来动态地显示所有匹配的元素,在显示完成后可选
地触发一个回调函数。这个动画效果只调整元素的高度,可以使匹配的元素以
“滑动”的方式显示出来。
slideUp( speed, [callback] ) 通过高度变化(向上减小)来动态地隐藏所有匹配的元素,在隐藏完成后可选地
触发一个回调函数。这个动画效果只调整元素的高度,可以使匹配的元素以”滑动”
的方式隐藏起来。
slideToggle( speed, [callback] ) 通过高度变化来切换所有匹配元素的可见性,并在切换完成后可选地触发一个回
调函数。 这个动画效果只调整元素的高度,可以使匹配的元素以”滑动”的方式隐
藏或显示。
fadeIn( speed, [callback] ) 通过不透明度的变化来实现所有匹配元素的淡入效果,并在动画完成后可选地触
发一个回调函数。 这个动画只调整元素的不透明度,也就是说所有匹配的元素的
高度和宽度不会发生变化。
fadeOut( speed, [callback] ) 通过不透明度的变化来实现所有匹配元素的淡出效果,并在动画完成后可选地触
发一个回调函数。 这个动画只调整元素的不透明度,也就是说所有匹配的元素的
高度和宽度不会发生变化。
fadeTo( speed, opacity, [callback] ) 把所有匹配元素的不透明度以渐进方式调整到指定的不透明度,并在动画完成
后可选地触发一个回调函数。 这个动画只调整元素的不透明度,也就是说所
有匹配的元素的高度和宽度不会发生变化。
stop( ) 停止所有匹配元素当前正在运行的动画。如果有动画处于队列当中,他们就会立即开始。
queue( ) 取得第一个匹配元素的动画序列的引用(返回一个内容为函数的数组)
queue( callback ) 在每一个匹配元素的事件序列的末尾添加一个可执行函数,作为此元素的事件函数
queue( queue ) 以一个新的动画序列代替所有匹配元素的原动画序列
dequeue( ) 执行并移除动画序列前端的动画
animate( params, [duration], [easing], [callback] ) 用于创建自定义动画的函数。
animate( params, options ) 创建自定义动画的另一个方法。作用同上。

JQuery Traversing 方法说明

eq( index ) 从匹配的元素集合中取得一个指定位置的元素,index从0开始
filter( expr ) 返回与指定表达式匹配的元素集合,可以使用”,”号分割多个expr,用于实现多个条件筛选
filter( fn ) 利用一个特殊的函数来作为筛选条件移除集合中不匹配的元素。
is( expr ) 用一个表达式来检查当前选择的元素集合,如果其中至少有一个元素符合这个给定的
表达式就返回true。
map( callback ) 将jQuery对象中的一组元素利用callback方法转换其值,然后添加到一个jQuery数组中。
not( expr ) 从匹配的元素集合中删除与指定的表达式匹配的元素。
slice( start, [end] ) 从匹配元素集合中取得一个子集,和内建的数组的slice方法相同。
add( expr ) 把与表达式匹配的元素添加到jQuery对象中。
children( [expr] ) 取得一个包含匹配的元素集合中每一个元素的所有子元素的元素集合。可选的过滤器
将使这个方法只匹配符合的元素(只包括元素节点,不包括文本节点)。
contents( ) 取得一个包含匹配的元素集合中每一个元素的所有子孙节点的集合(只包括元素节点,不
包括文本节点),如果元素为iframe,则取得其中的文档元素
find( expr ) 搜索所有与指定表达式匹配的元素。
next( [expr] ) 取得一个包含匹配的元素集合中每一个元素紧邻的后面同辈元素的元素集合。
nextAll( [expr] ) 取得一个包含匹配的元素集合中每一个元素所有的后面同辈元素的元素集合
parent( [expr] ) 取得一个包含着所有匹配元素的唯一父元素的元素集合。
parents( [expr] ) 取得一个包含着所有匹配元素的唯一祖先元素的元素集合(不包含根元素)。
prev( [expr] ) 取得一个包含匹配的元素集合中每一个元素紧邻的前一个同辈元素的元素集合。
prevAll( [expr] ) 取得一个包含匹配的元素集合中每一个元素的之前所有同辈元素的元素集合。
siblings( [expr] ) 取得一个包含匹配的元素集合中每一个元素的所有同辈元素的元素集合。
andSelf( ) 将前一个匹配的元素集合添加到当前的集合中
取得所有div元素和其中的p元素,添加border类属性。取得所有div元素中的p元素,
添加background类属性
$(”div”).find(”p”).andSelf().addClass(”border”);
$(”div”).find(”p”).addClass(”background”);
end( ) 结束当前的操作,回到当前操作的前一个操作
找到所有p元素其中的span元素集合,然后返回p元素集合,添加css属性
$(”p”).find(”span”).end().css(”border”, “2px red solid”);

JQuery Selectors 方法说明

基本选择器
$(”#myDiv”) 匹配唯一的具有此id值的元素
$(”div”) 匹配指定名称的所有元素
$(”.myClass”) 匹配具有此class样式值的所有元素
$(”*”) 匹配所有元素
$(”div,span,p.myClass”) 联合所有匹配的选择器
层叠选择器
$(”form input”) 后代选择器,选择ancestor的所有子孙节点
$(”#main > *”) 子选择器,选择parent的所有子节点
$(”label + input”) 临选择器,选择prev的下一个临节点
$(”#prev ~ div”) 同胞选择器,选择prev的所有同胞节点
基本过滤选择器
$(”tr:first”) 匹配第一个选择的元素
$(”tr:last”) 匹配最后一个选择的元素
$(”input:not(:checked) + span”)从原元素集合中过滤掉匹配selector的所有元素(这里有是一个临选择器)
$(”tr:even”) 匹配集合中偶数位置的所有元素(从0开始)
$(”tr:odd”) 匹配集合中奇数位置的所有元素(从0开始)
$(”td:eq(2)”) 匹配集合中指定位置的元素(从0开始)
$(”td:gt(4)”) 匹配集合中指定位置之后的所有元素(从0开始)
$(”td:gl(4)”) 匹配集合中指定位置之前的所有元素(从0开始)
$(”:header”) 匹配所有标题
$(”div:animated”) 匹配所有正在运行动画的所有元素
内容过滤选择器
$(”div:contains(’John’)”) 匹配含有指定文本的所有元素
$(”td:empty”) 匹配所有空元素(只含有文本的元素不算空元素)
$(”div:has(p)”) 从原元素集合中再次匹配所有至少含有一个selector的所有元素
$(”td:parent”) 匹配所有不为空的元素(含有文本的元素也算)
$(”div:hidden”) 匹配所有隐藏的元素,也包括表单的隐藏域
$(”div:visible”) 匹配所有可见的元素
属性过滤选择器
$(”div[id]”) 匹配所有具有指定属性的元素
$(”input[name=’newsletter’]”) 匹配所有具有指定属性值的元素
$(”input[name!=’newsletter’]”) 匹配所有不具有指定属性值的元素
$(”input[name^=’news’]”) 匹配所有指定属性值以value开头的元素
$(”input[name$=’letter’]”) 匹配所有指定属性值以value结尾的元素
$(”input[name*=’man’]”) 匹配所有指定属性值含有value字符的元素
$(”input[id][name$=’man’]”) 匹配同时符合多个选择器的所有元素
子元素过滤选择器
$(”ul li:nth-child(2)”),
$(”ul li:nth-child(odd)”), 匹配父元素的第n个子元素
$(”ul li:nth-child(3n + 1)”)

$(”div span:first-child”) 匹配父元素的第1个子元素
$(”div span:last-child”) 匹配父元素的最后1个子元素
$(”div button:only-child”) 匹配父元素的唯一1个子元素
表单元素选择器
$(”:input”) 匹配所有的表单输入元素,包括所有类型的input, textarea, select 和 button
$(”:text”) 匹配所有类型为text的input元素
$(”:password”) 匹配所有类型为password的input元素
$(”:radio”) 匹配所有类型为radio的input元素
$(”:checkbox”) 匹配所有类型为checkbox的input元素
$(”:submit”) 匹配所有类型为submit的input元素
$(”:image”) 匹配所有类型为image的input元素
$(”:reset”) 匹配所有类型为reset的input元素
$(”:button”) 匹配所有类型为button的input元素
$(”:file”) 匹配所有类型为file的input元素
$(”:hidden”) 匹配所有类型为hidden的input元素或表单的隐藏域
表单元素过滤选择器
$(”:enabled”) 匹配所有可操作的表单元素
$(”:disabled”) 匹配所有不可操作的表单元素
$(”:checked”) 匹配所有已点选的元素
$(”select option:selected”) 匹配所有已选择的元素

JQuery CSS 方法说明

css( name ) 访问第一个匹配元素的样式属性。
css( properties ) 把一个”名/值对”对象设置为所有匹配元素的样式属性。
$(”p”).hover(function () {
$(this).css({ backgroundColor:”yellow”, fontWeight:”bolder” });
}, function () {
var cssObj = {
backgroundColor: “#ddd”,
fontWeight: “”,
color: “rgb(0,40,244)”
}
$(this).css(cssObj);
});
css( name, value ) 在所有匹配的元素中,设置一个样式属性的值。
offset( ) 取得匹配的第一个元素相对于当前可视窗口的位置。返回的对象有2个属性,
top和left,属性值为整数。这个函数只能用于可见元素。
var p = $(”p:last”);
var offset = p.offset();
p.html( “left: ” + offset.left + “, top: ” + offset.top );
width( ) 取得当前第一匹配的元素的宽度值,
width( val ) 为每个匹配的元素设置指定的宽度值。
height( ) 取得当前第一匹配的元素的高度值,
height( val ) 为每个匹配的元素设置指定的高度值。

JQuery Utilities 方法说明
jQuery.browser
.msie 表示ie
jQuery.browser.version 读取用户浏览器的版本信息
jQuery.boxModel 检测用户浏览器针对当前页的显示是否基于w3c CSS的盒模型
jQuery.isFunction( obj ) 检测传递的参数是否为function
function stub() { }
var objs = [
function () {},
{ x:15, y:20 },
null,
stub,
“function”
];
jQuery.each(objs, function (i) {
var isFunc = jQuery.isFunction(objs[i]);
$(”span:eq( ” + i + “)”).text(isFunc);
});
jQuery.trim( str ) 清除字符串两端的空格,使用正则表达式来清除给定字符两端的空格
jQuery.each( object, callback ) 一个通用的迭代器,可以用来无缝迭代对象和数组
jQuery.extend( target, object1, [objectN] ) 扩展一个对象,修改原来的对象并返回,这是一个强大的实现继承的
工具,这种继承是采用传值的方法来实现的,而不是JavaScript中的
原型链方式。
合并settings和options对象,返回修改后的settings对象
var settings = { validate: false, limit: 5, name: “foo” };
var options = { validate: true, name: “bar” };
jQuery.extend(settings, options);

合并defaults和options对象,defaults对象并没有被修改。options对象中的值
代替了defaults对象的值传递给了empty。

var empty = {}
var defaults = { validate: false, limit: 5, name: “foo” };
var options = { validate: true, name: “bar” };
var settings = $.extend(empty, defaults, options);
jQuery.grep( array, callback, [invert] ) 通过一个筛选函数来去除数组中的项
$.grep( [0,1,2], function(n,i){
return n > 0;
});
jQuery.makeArray( obj ) 将一个类似数组的对象转化为一个真正的数组
将选取的div元素集合转化为一个数组
var arr = jQuery.makeArray(document.getElementsByTagName(”div”));
arr.reverse(); // use an Array method on list of dom elements
$(arr).appendTo(document.body);
jQuery.map( array, callback ) 使用某个方法修改一个数组中的项,然后返回一个新的数组
jQuery.inArray( value, array ) 返回value在数组中的位置,如果没有找到,则返回-1
jQuery.unique( array ) 删除数组中的所有重复元素,返回整理后的数组

 

jqueryajaxjsonparsererror

data:”{}”, data为空也一定要传”{}”;不然返回的是xml格式的。并提示parsererror

1、编写4种WebService方法

[WebService(Namespace = “http://tempuri.org/”)]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService] //令WebService成功传入Json参数,并以Json形式返回结果
[GenerateScriptType(typeof(Person))] //不是必要,但推荐添加(如果Person里面再嵌套另一个复杂类型,则必要声明)
[ToolboxItem(false)]
public class WebService1 : System.Web.Services.WebService
{
/// <summary><br>/// 无任何参数<br>/// </summary>
/// <returns></returns>
[WebMethod]
public string HelloWorld()
{
return “Hello World”;
}
/// <summary><br>/// 传入参数<br>/// </summary>
///
/// <returns></returns>
[WebMethod]
public string Hello(string name)
{
return string.Format(“Hello {0}”, name);
}
/// <summary><br>/// 返回泛型列表<br>/// </summary>
///
/// <returns></returns>
[WebMethod]
public List<int> CreateArray(int i)<br> {<br> List<int> list = new List<int>();<br>while (i &gt;= 0)<br> {<br> list.Add(i–);<br> }<br>return list;<br> }<br>/// <summary><br>/// 返回复杂类型<br>/// </summary><br>/// <param name=”name”>
<br>/// <param name=”age”>
<br>/// <returns></returns><br> [WebMethod]<br>public Person GetPerson(string name, int age)<br> {<br>return new Person()<br> {<br> Name = name,<br> Age = age<br> };<br> }<br> }<br>/// <summary><br>/// 复杂类型<br>/// </summary><br>public class Person<br> {<br>public string Name { get; set; }<br>public int Age { get; set; }<br> } <p>2、编写js调用以上方法 </p>
<p><br><br><br></p>
<br><title>无标题页</title>
<br><style type=”text/css”><br> input<br>{<br> width:200px;<br>}<br></style>
<br><br><br> $(function(){ <br>/*<br> 1、WebService请求类型都为Post,WebService的Url为“[WebServiceUrl]/[WebMethod]”<br> 2、contentType声明为Json<br> 3、data要用Json的字符串格式传入<br> 4、设置了dataType为json后,result就直接为返回的Json对象。<br>*/<br>//调用无参数方法<br> $(“#btnHelloWorld”).click(function(){<br> $.ajax({<br> type: “POST”,<br> contentType:”application/json”,<br> url:”WebService1.asmx/HelloWorld”,<br><strong>data:”{}”,<br></strong> dataType:’json’,<br> success:function(result){ <br> alert(result.d);<br> }<br> });<br> }); <br>//传入1个参数<br> $(“#btnHello”).click(function(){<br> $.ajax({<br> type: “POST”,<br> contentType:”application/json”,<br> url:”WebService1.asmx/Hello”,<br> data:”{name:’KiMoGiGi’}”,<br> dataType:’json’,<br> success:function(result){ <br> alert(result.d);<br> }<br> });<br> });<br>//返回泛型列表<br> $(“#btnArray”).click(function(){<br> $.ajax({<br> type: “POST”,<br> contentType:”application/json”,<br> url:”WebService1.asmx/CreateArray”,<br> data:”{i:10}”,<br> dataType:’json’,<br> success:function(result){ <br> alert(result.d.join(” | “));<br> }<br> });<br> });<br>//返回复杂类型<br> $(“#btnPerson”).click(function(){<br> $.ajax({<br> type: “POST”,<br> contentType:”application/json”,<br> url:”WebService1.asmx/GetPerson”,<br> data:”{name:’KiMoGiGi’,age:26}”,<br> dataType:’json’,<br> success:function(result){<br>var person = result.d;<br>var showText = [];<br>for(var p in person){<br> showText.push(p + “:” + person[p]);<br> }<br> alert(showText.join(“\r\n”));<br> }<br> });<br> });<br> });<br><br><br><br><form id=”form1″ runat=”server”>
<br><p><br><input type=”button” id=”btnHelloWorld” value=”HelloWorld”><br></p>
<br><p><br><input type=”button” id=”btnHello” value=”Hello”><br></p>
<br><p><br><input type=”button” id=”btnArray” value=”CreateArray”><br></p>
<br><p><br><input type=”button” id=”btnPerson” value=”GetPerson”><br></p>
<br>
</form>
<br><br></int></int></int>

extajax和grid简单实践

<%@ page language=”java” contentType=”text/html; charset=GB18030″

    pageEncoding=”GB18030″%>

<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>

<html>

<head>

<link rel=”stylesheet” type=”text/css” href=”<%=request.getContextPath() %>/js/resources/css/ext-all.css” />

<script type=”text/javascript” src=”<%=request.getContextPath() %>/js/adapter/ext/ext-base.js”></script>

<script type=”text/javascript” src=”<%=request.getContextPath() %>/js/ext-all.js”></script>

<script type=”text/javascript” src=”<%=request.getContextPath() %>/js/json.js”></script>

<meta http-equiv=”Content-Type” content=”text/html; charset=GB18030″>

<title>Insert title here</title>

<script type=”text/javascript”>

Ext.onReady(function(){

var my={};

my.name=”yk”;

my.age=”23″;

Ext.Ajax.request({

url:”http://localhost:8080/test/ajaxServlet”,

params:JSON.stringify(my),

success:function(response){

test(response);

}

});

function test(response)

{

var text=response.responseText;

alert(text);

var data=Ext.util.JSON.decode(text);

alert(data.name);

}

var data=[

{id:0,name:”yk”,age:”22″},

{id:1,name:”yk1″,age:”23″},

{id:2,age:”24″,name:”yk2″},

{name:”yk3″,age:”25″},

{id:4,name:”yk4″,age:”26″},

{id:5,name:”yk5″,age:”27″}

];

var data1=[

[1,”yk”,23],[2,26],[3,”yk3″,28]

];

var recordType=new Ext.data.Record.create([{name:”id”,mapping:”id”},{name:”name”,mapping:”name”},{name:”age”,mapping:”age”}]);

var jsonType={id:”id”};

var reader=new Ext.data.JsonReader(jsonType,recordType);

//var store=new Ext.data.SimpleStore({data:data1,fields:[“id”,”name”,”age”]});

var store=new Ext.data.JsonStore({data:data,fields:[“id”,”name”,”age”]});

var cms=[

{header:”id”,dataIndex:”id”,width:40},

{header:”name”,dataIndex:”name”,width:50},

{header:”age”,dataIndex:”age”,width:110}

];

var grid=new Ext.grid.GridPanel({

store:store,

columns:cms,

title:”测试数据表格”,

height:200,

width:200,

});

grid.render(“grid”);

})

</script>

</head>

<body>

<div id=”grid”></div>

</body>

</html>

uploadifyajax插件

 

下载uploadify:http://www.uploadify.com/

 

需要的文件:

uploadify.css

jquery.uploadify.v2.1.0.min.js

swfobject.js

jquery-1.4.2.js

 

 

 

<tr>
				<td>学生照片:</td>
				<td>
					<span id="fileSpan"><input type="file" name="stuPicture" id="stuPicture"/></span>
					<span id="imgSpan" style="display:none"></span>
					<input type="hidden" name="student.stuPhoto" id="stuPhoto"/>
				</td>
				
			</tr>

 

 

 

$(document).ready(function(){
	$("#stuPicture").uploadify({
		'uploader'     : 'jQuery/uploadify/scripts/uploadify.swf',//设置uploadify路径
		'script'       : 'Student_doAjaxUpload.action',//请求响应的Action
		'cancelImg'    : 'jQuery/uploadify/cancel.png',//设置  取消按钮图片的路径
		'folder'       : '',//设置上传文件后保存的路径
		'fileDataName' : 'stuPicture',//上传文件的文件
		'auto'         : true,//设置是否自动上传
		'multi'        : false,//设置是否多文件上传
		'onComplete'   :function(event,queueId,fileObj,response){
			//因为传回的数据是字符串,通过eval方法将其转化成json格式
			var jsonObject=eval('('+response+')');
			var filePath=jsonObject.stuFile;//得到回调的图片的路径
			var img=$("<img/>").attr("src",filePath+" now="+new Date()).attr("width","100").attr("height","50");
			$("#imgSpan").append(img).show();
			$("#fileSpan").hide();
			$("#stuPhoto").val(filePath);
		},
		'onError'      :function(event,queueID,fileObj,errorObj){
			alert("Ajax上传图片出错!请重新试过!");
		}
		
	});	
	
});

 

 

 

jQuery入门[2]-选择器

jQuery入门[2]-选择器 jQuery入门[1]-构造函数

jQuery入门[2]-选择器

jQuery入门[3]-事件

jQuery入门[4]-链式代码

jQuery入门[5]-AJAX

jQuery入门[6]-动画

jQuery之所以令人爱不释手,在于其强大的选择器表达式令DOM操作优雅而艺术。

jQuery的选择符支持id,tagName,css1-3 expressions,XPath,参见:http://docs.jquery.com/Selectors

DEMO:

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<html xmlns=”http://www.w3.org/1999/xhtml”>

<head>

    <title>Selector</title>

    <script src=”../scripts/jquery-1.2.3.intellisense.js” type=”text/javascript”></script>

</head>

<body>

    <input value=”1″ /> +

    <input value=”2″ />

    <input type=”button” value=”=” />

    <label>&nbsp;</label>

    <script type=”text/javascript”>

        $(“input[type=’button’]”).click(function(){

            var i = 0;

            $(“input[type=’text’]”).each(function(){

                i += parseInt($(this).val());

            });

            $(‘label’).text(i);

        });

        $(‘input:lt(2)’)

            .add(‘label’)

            .css(‘border’,’none’)

            .css(‘borderBottom’,’solid 1px navy’)

            .css({‘width’:’30px’});

    </script>

</body>

</html>运行效果如下:

代码分解:

$(“input[type=’button’]”)用于找到type属性为button的input元素(此为CSS表达式,IE7才开始支持,所以在IE6中通常用jQuery的这种表达式代替CSS代码设置样式)。click()函数为button添加click事件处理函数。

在button_click时,$(“input[type=’text’]”)找出所有输入框,each()函数遍历找出来的数组中的对象的值,相加后设到label中。

        $(‘input:lt(2)’)

            .add(‘label’)

两行代码意为:所有input中的前面两个(lt表示序号小于)再加上label对象合并成一个jQuery对象。

            .css(‘border’,’none’)

            .css(‘borderBottom’,’solid 1px navy’)

            .css({‘width’:’30px’});

以上三行代码都是针对之前的jQuery对象设置CSS样式,如果一次需要设置多个CSS值,可用另一种形式,如:

            .css({‘border’:’none’,’borderBottom’:’solid 1px navy’,’width’:’30px’});

css()函数如果只传一个字符串参数,则为取样式值,比如css(‘color’)为取得当前jQuery对象的样式属性color的值。jQuery对象有多种这样的函数,比如,val(”)为设value,val()为取value,text(‘text’)为设innerText,text()为取得innerText,此外还有html(),用于操作innerHTML,而click(fn)/click(),change(fn)/change()……系统函数则为事件的设置处理函数与触发事件。

由于多数jQuery对象的方法仍返回当前jQuery,所以jQuery代码通常写成一串串的,如上面的

            .css(‘border’,’none’)

            .css(‘borderBottom’,’solid 1px navy’)

            .css({‘width’:’30px’});

,而不需要不断重复定位对象,这是jQuery的链式特点,后面文章还会有补充。

referrence:http://docs.jquery.com/Selectors

–未完代续–

EXT非ajax登录页面

<html>

<head>

    <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>

    <link rel=”stylesheet” type=”text/css” href=”<%=request.getContextPath()%>/ext/resources/css/ext-all.css” />

<script type=”text/javascript” src=”<%=request.getContextPath()%>/ext/adapter/ext/ext-base.js”></script>

    <script type=”text/javascript” src=”<%=request.getContextPath()%>/ext/ext-all.js”></script>

</head>

<body>

<script>

Ext.onReady(function(){  

          //使用表单提示

          Ext.QuickTips.init();

          Ext.form.Field.prototype.msgTarget = ‘side’;

       

          //定义表单

          var simple = new Ext.FormPanel({

            labelWidth: 75,         

            baseCls: ‘x-plain’,

            defaults: {width: 150},

            defaultType: ‘textfield’,//默认字段类型

            onSubmit: Ext.emptyFn,

submit: function(){

this.getEl().dom.action = ‘${pageContext.request.contextPath}/web/manager/login.do’; //连接到服务器的url地址

this.getEl().dom.submit();

},

                

            //定义表单元素

            items: [{

                  fieldLabel: ‘帐户’,

                  name: ‘name’,//元素名称

                  //anchor:’95%’,//也可用此定义自适应宽度

                  allowBlank:false,//不允许为空

                  blankText:’帐户不能为空’//错误提示内容

               },{

                   inputType:’password’,

                  fieldLabel: ‘密码’,

                  //anchor:’95%’,

                  name: ‘pwd’,

                  allowBlank:false,

                  blankText:’密码不能为空’

               }

            ],

            buttons: [{

               text: ‘登陆’,

               type: ‘submit’,

               //定义表单提交事件

               handler:function(){simple.form.submit();}//重置表单

            },{

               text: ‘取消’,

               handler:function(){simple.form.reset();}//重置表单

            }]

         });   

                //定义窗体

               win = new Ext.Window({

                  id:’win’,

                  title:’用户登陆’,

                  layout:’fit’,   //之前提到的布局方式fit,自适应布局              

                  width:300,

                  height:150,

                  plain:true,

                        bodyStyle:’padding:5px;’,

                  maximizable:false,//禁止最大化

                  closeAction:’close’,

                  closable:false,//禁止关闭

                  collapsible:true,//可折叠

                  plain: true,

                  buttonAlign:’center’,

                  items:simple//将表单作为窗体元素嵌套布局

               });

               win.show();//显示窗体

       });

</script>

</body>

</html>

JS+JQuery模仿百度下拉效果,Opera方向键向下问题。。。。。。。

先看看代码吧,基本效果已经实现。

但是在Opera中当输入值后,按方向键控制选择,向下没得效果,向上可以。。。。

其它浏览器没得问题。。

  $(“#” + inputDataTextId).keyup(function(event){

});

这个方法好像向下的时候根本就不执行。。。

请高人指点下。。。。

body {
    background-color: #F8F8FF;
}

#main {
    position: absolute;
    top: 100px;
    left: 36%;
    width: 400px;
    background-color: #F5FFFA;
}

#input_text {
    position: absolute;
    font-size: 18px;
    width: 390px;
    height: 23px;
    border: 1px solid #C9C9C9;
}

#input_div {
    position: absolute;
    width: 392px;
    top: 26px;
    border: 1px solid #454545;
    display: none;
    overflow: hidden;
}

#input_div {
    text-decoration: none;
    background-color: #FFFAFA;
}

#input_div div {
    vertical-align: middle;
    padding: 4px;
    font-weight: bold;
    color: #000000;
    width: 100%;
}

.div_item_select {
    background-color: #E0EEEE;
    height: 22px;
    font-size: 18px;
}

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Demo</title>
        <script type="text/javascript" src="jquery-1.4.2.js">
        </script>
    
    </head>
    <body>
        <div id="main">
            <input type="text" id="input_text">
            <div id="input_div">
            </div>
        </div>
    </body>
</html>


$(document).ready(function(){
  /**
   * 当鼠标 放上去 的效果 CSS  Class名称
   */
var divItemSelect = 'div_item_select';
/**
* 展示数据 的DIV
*/
  var showDataDivId = "input_div";
/**
* 输入框
*/
  var inputDataTextId = "input_text";
/**
* 点击
* @param {Object} event 
*/
  $(document).click(function(event){
      if (event.target.id != inputDataTextId) {
$("#" + showDataDivId).slideUp(200);
      }
  });
/**
* 鼠标在文本框输入值
* @param {Object} event
*/
  $("#" + inputDataTextId).keyup(function(event){
      if (event.keyCode == 40) {//down
          chageSelect(1);
      }
      else  if (event.keyCode == 38) {//up
          chageSelect(-1);
      }
      else  if (event.keyCode == 13) {//回车
          item_click($("#" + showDataDivId + " div[class='" + divItemSelect + "']"));
      }
      else   if (this.value.length > 0) {
          //..ajax请求, 返回的时候 调用。。
          //以下为 Ajax 返回的时候 调用的数据
          var len = 10 - this.value.length;
          if (len < 1) {
              len = 5;
          }
          var str = "";
          for (var i = 0; i < len; i++) {
              var index = i;//此处 为展示顺序,必须要
              //此处拼接服务器返回的数据。。。。
              str += "<div>" + this.value + index + "</div>" + //展示的数据
              "<input type='hidden' name='d_index' value='" +
              index +
              "' />" //位置,勿动
            //+ "<input type='hidden' name='d_value' value='" +index +"' />"; //用于放置数据
          }
          //展示层,并展示数据
          $("#" + showDataDivId).html(str).slideDown(200);
          //注册事件
          registerInputEvent();
      }
      else {
          $("#" + showDataDivId).slideUp(200);
      }
  });
//.blur(function(){$("#" + showDataDivId).slideUp(200);});
/**
* 键盘操作  向上 或向上 
* @param {Object} opt   向上 -1  向下 1 
*/
  function chageSelect(opt){
      if ($("#input_div").css('display') == 'block') {
          var obj = $("#input_div div[class='" + divItemSelect + "']");
          if (obj.html() == null) {//当前还未选中。
              if (opt == 1) {
                  $("#" + showDataDivId + " div:first").addClass(divItemSelect);
              }
              else {
                  $("#" + showDataDivId + " div:last").addClass(divItemSelect);
              }
          }
          else {
              var curr = parseInt($("#" + showDataDivId + " div[class='" + divItemSelect + "'] ~ input[name='d_index']").val()) + opt;
              var divCount = $("#" + showDataDivId + " div").size();
              $("#" + showDataDivId + " div[class='" + divItemSelect + "']").removeClass(divItemSelect);
              $("#" + showDataDivId + " div:eq(" + ((curr < 0)   (divCount - 1) : ((curr == divCount)   0 : curr) + ")")).addClass(divItemSelect);
          }
      }
  }
/**
* 注册事件
*/
  function registerInputEvent(){
      $("#" + showDataDivId + " div").click(function(){
          item_click($(this));
      }).mouseover(function(){
          $("#" + showDataDivId + " div[class='" + divItemSelect + "']").removeClass(divItemSelect);
          $(this).addClass(divItemSelect);
      }).mouseout(function(){
          $(this).removeClass(divItemSelect);
      });
  }
  /**
   * 点击每一项的操作
   * @param {Object} obj
   */
  function item_click(obj){
      if (obj.html() == null) {//如果是按回车键。。。
          //暂时不做操作。。。。
      }
      else { //如果是点击 选择
          $("#" + inputDataTextId).val($(obj).html()).focus();
          //取得 你要放置的数据  d_value   为 变量名。。。
          //var currValue = $("#" + showDataDivId + " div[class='" + divItemSelect + "'] ~ input[name='d_value']").val();
      }
$("#" + showDataDivId).hide();
      //跳转。。。。。等 操作。
  }
});

  • 大小: 5.2 KB

2010.02.03(2)——给jqueryajax加一个进度条以及相对定位和绝对定位

2010.02.03(2)——给jquery ajax加一个进度条以及 相对定位和绝对定位

相对定位:

#loading {
  position: relative;
  left: 30px;
  top: 20px;
}

绝对定位:

#loading {
  position: absolute;
  left: 30px;
  top: 20px;
}

相对定位:是相对于原来的位置

绝对定位:是相对于最近的已定位祖先元素,如果元素没有已定位的祖先元素,那么它的位置相对于最初的   包含块。

因为绝对定位的框与文档流无关,所以它们可以覆盖页面上的其它元素。可以通过设置 z-index 属性来控制这些框的堆放次序。

就是说,绝对定位,不会破坏原来的文档流。

比如说吧 ,上一篇中,写了个ajax异步交互,但是,如果数据量过大时,应该给页面加一个进度条,这样更加人性化一点,

就用上一篇的html吧

html

<hr>

/**注意这里是区别  loading.gif是一张进度条的图片**/
<div id="loading"><img src='images/loading.gif' /></div>
/**注意这里是区别**/

<input id="name" type="hidden" value="${name }"/> //隐藏文本域,用于上面传参数
<input id="startTime" type="hidden" value="${start }"/>
<input id="endTime" type="hidden" value="${end }"/>
<center><font color="#005ECE" size="5">${name }统计表 <br />${start }至${end }</font>
<h5 align="right">收入单位:¥</h5>
.....
.....

js:

$(function(){
	fn3($('#year'));
	fn4();
	//fn5();
	//alert();
	$('#year').change(fn4);
/**注意这里是区别  ajaxStart() ajax请求开始时调用,ajaxStop() ajax请求结束时调用**/
	$(window).ajaxStart(function(){
		$("#loading").show();
		
	});
	$(window).ajaxStop(function(){
		$("#loading").hide();
	});
/**注意这里是区别**/
	
});

这样子写,功能是实现了,但是有个问题,当数据加载完时,<hr>下面那个div消失了,整个页面都会向上移动一下,要解决这个问题,就需要把这个div设置成绝对的,让它不影响文档流

css:

#loading{
	z-index: 100;
	position: absolute;
	right: 10px;
}

这样就OK了