第一组:杨昊 震惊!原来HTML5还有这些好玩的东西(UC震惊部)
如果需要在移动浏览器中实现拨打电话,调用sms发短信,发送email等功能,移动手机WEB页面(HTML5)Javascript提供的接口是一个好办法。
采用url href链接的方式,实现在Safari ios,Android 浏览器,webos浏览器,塞班浏览器,IE,Operamini等主流浏览器,进行拨打电话功能。
1. 拨打电话
在电话号码前面可以加上 + (加号)表示国际号码。如:
最常用WEB页面JS实现一键拨号的电话拨打功能
例子:
<a href="tel:10086">10086</a>
使用wtai协议进行拨打电话
<a href="wtai://wp/mc;10086">10086</a>
2. 发送短信
如果是需要调用短信的接口,可以将链接写成下面的格式:
sms:<phone_number>[,<phone-number>]*[?body=<message_body>]
例如:
给 10086 发短信:
<a href="sms:10086">发送信息</a>给 10086 发送内容为"cxye"的短信:
<a href="sms:10086?body=cxye">发送信息</a>给 10086 和 10010 发送内容为"cxye"的短信:
<a href="sms:10086,10010?body=cxye">发送信息</a>
3. Mail 发送邮件
就和普通的html一样使用mailto
给
test1@163.com
发送邮件:
<a href="mailto:test1@163.com">mail</a>给test1@163.com和test2@126.com发送邮件:
<a href="mailto:test1@163.com,test2@126.com">mail</a>给test1@163.com发送主题为“testing”的邮件:
<a href="mailto:test1@163.com?subject=Testing">mail</a>给test1@163.com发送主题为“testing”的邮件,并抄送给test3@126.com:
<a href="mailto:test1@163.com?subject=Testing mailto&cc=test3@126.com">mail</a>
4. Android Market
如果希望一个链接能够激活Android市场的功能,可以把链接写成:
<a href="market://search?q=[query]">Android Market link</a>
其中<query>就是搜索的内容,你应用的名称
例子:
<a href="market://search?q=MyApp">MyApp</a>
5. GPS地图定位
<a href="geopoint:[经度],[纬度]">我的位置</a>
例如:
<a href="geopoint:108.954823,34.275891">我的位置</a>
第二组:赵彩凤 AppCan-浮动窗口模块Frame
appcan.frame.open(id,url,left,top,name,index,change,extraInfo) //打开一个浮动窗口
id:要打开浮动窗口的名称
url:浮动窗口要加载的页面的地址,如果url是一个数组则打开多页面浮动窗口
left:浮动窗口距离左边的距离
top:浮动窗口距离上边的距离
name:强制改变打开窗口的名称
index:设置选中的多页面窗口的默认索引
change:如果多页面浮动窗口改变时会触发该回调,该回调有以下两个参数:err:正确返回情况下为null,错误时为Error信息.res:返回当前选择的浮动窗口页面的数据,appcan.frame.close(name) //关闭指定的浮动窗口
//关闭demo浮动窗口 appcan.frame.close('demo');
//另外一种使用方式 var frame = appcan.require('frame'); frame.close('demo');appcan.frame.resize(id,left,top,name) //设置指定的浮动窗口恢复到指定窗口的大小,并设置浮动窗口的位置
appcan.frame.resizePopoverByEle(id,left,top,name) //设置指定的浮动窗口恢复到指定窗口的大小,并设置浮动窗口的位置
appcan.frame.bringToFront(name) //把指定的浮动窗口设置为最上层
//把demo窗口显示到所有窗口最上面
appcan.frame.bringToFront('demo');
//另外一种使用方式
var frame = appcan.require('frame');
frame.bringToFront('demo');appcan.frame.evaluateScript(name,popName,scriptContent) //在指定的浮动窗口内执行响应的脚本
//在demo窗口的浮动窗口执行脚本
appcan.frame.evaluateScript({
name:'demo',
popName:'demoPop',
scriptContent:'alert("hello world")'
});
//另外一种使用方式
var frame = appcan.require('frame');
frame.evaluateScript({
name:'demo',
popName:'demoPop',
scriptContent:'alert("hello world")'
});
appcan.frame.openMulti(popName,content,dataType,left,top,width,height,fontSize,flag,indexSelected) //浮动窗口中页面切换
appcan.frame.closeMulti(popName) //关闭多页面浮动窗口
appcan.frame.selectMulti(popName,index) //设置多页面浮动窗口跳转到的子页面窗口的索引
appcan.frame.sendToBack(name) //把指定的浮动窗口设置到最下层
appcan.frame.setBounce(bounceType,startPullCall,downEndCall,upEndCall,color,imgSettings) //设置上下弹动效果
转自AppCan官网http://newdocx.appcan.cn/JSSDK/Frame
第三组:蔡永坚 存储过程-存储过程使用一
不缓存存储过程
- WITH RECOMPILE 不缓存
if (object_id('proc_temp', 'P') is not null)
drop proc proc_temp
go
create proc proc_temp
with recompile
as
select * from student;
go
exec proc_temp;
- 加密WITH ENCRYPTION
if (object_id('proc_temp_encryption', 'P') is not null)
drop proc proc_temp_encryption
go
create proc proc_temp_encryption
with encryption
as
select * from student;
go
exec proc_temp_encryption;
exec sp_helptext 'proc_temp';
exec sp_helptext 'proc_temp_encryption';
if (object_id('proc_cursor', 'P') is not null)
drop proc proc_cursor
go
create proc proc_cursor
@cur cursor varying output
as
set @cur = cursor forward_only static for
select id, name, age from student;
open @cur;
go
- 调用
declare @exec_cur cursor;
declare @id int,
@name varchar(20),
@age int;
exec proc_cursor @cur = @exec_cur output;--调用存储过程
fetch next from @exec_cur into @id, @name, @age;
while (@@fetch_status = 0)
begin
fetch next from @exec_cur into @id, @name, @age;
print 'id: ' + convert(varchar, @id) + ', name: ' + @name + ', age: ' + convert(char, @age);
end
close @exec_cur;
deallocate @exec_cur;--删除游标
- 存储过程、row_number完成分页
if (object_id('pro_page', 'P') is not null)
drop proc proc_cursor
go
create proc pro_page
@startIndex int,
@endIndex int
as
select count(*) from product
;
select * from (
select row_number() over(order by pid) as rowId, * from product
) temp
where temp.rowId between @startIndex and @endIndex
go
--drop proc pro_page
exec pro_page 1, 4
--
- 分页存储过程
if (object_id('pro_page', 'P') is not null)
drop proc pro_stu
go
create procedure pro_stu(
@pageIndex int,
@pageSize int
)
as
declare @startRow int, @endRow int
set @startRow = (@pageIndex - 1) * @pageSize +1
set @endRow = @startRow + @pageSize -1
select * from (
select *, row_number() over (order by id asc) as number from student
) t
where t.number between @startRow and @endRow;
exec pro_stu 2, 2;
第四组:张元一 Cookie/Session机制详解
1.2 Session机制
除了使用Cookie,Web应用程序中还经常使用Session来记录客户端状态。Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。
1.2.1 什么是Session
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。
1.2.3 Session的生命周期
Session保存在服务器端。为了获得更高的存取速度,服务器一般把Session放在内存里。每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。
Session在用户第一次访问服务器的时候自动创建。需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。如果尚未生成Session,也可以使用request.getSession(true)强制生成Session。
Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。
1.2.4 Session的有效期
由于会有越来越多的用户访问服务器,因此Session也会越来越多。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。
Session的超时时间为maxInactiveInterval属性,可以通过对应的getMaxInactiveInterval()获取,通过setMaxInactiveInterval(longinterval)修改。
Session的超时时间也可以在web.xml中修改。另外,通过调用Session的invalidate()方法可以使Session失效。
第五组:王炳钧 DevExpress GridView使用技巧之列标题点击事件
GridView有RowCellClick事件,即单元格点击事件,但是针对列标题行以及列标题单元格却没有相应的事件。
在这里使用GridView的MouseDown事件。这里同样使用的是GridHitInfo来获取点击位置的信息,来判断是否在列标题上。GridHitInfo根据鼠标点击的x、y坐标获取该点的相关信息,判断是否点击在列标题行内。
在这里使用GridView的MouseDown事件。这里同样使用的是GridHitInfo来获取点击位置的信息,来判断是否在列标题上。GridHitInfo根据鼠标点击的x、y坐标获取该点的相关信息,判断是否点击在列标题行内。
以上代码很简单,但是有个小问题,就是在该列右边线拖动这一列的列宽时,也会弹出对话框,因为这里拖动列宽也被视为点击鼠标。这显然不合适。解决这个问题的办法也很简单,就是判断鼠标点击位置不在右边线向左移动一点距离(3像素)范围内。下面对以上代码稍加修改,就不会再有这个问题了。