|
2008年9月28日
js:
當窗口關閉前做的動作
function window.onbeforeunload(){
}
在JS中定義數組刪除方法
<script language=javascript>
Array.prototype.del=function(n) { //n表示第幾項,從0開始算起。
//prototype為對象原型,注意這里為對象增加自定義方法的方法。
if(n<0) //如果n<0,則不進行任何操作。
return this;
else
return this.slice(0,n).concat(this.slice(n+1,this.length));
/*
concat方法:返回一個新數組,這個新數組是由兩個或更多數組組合而成的。
這里就是返回this.slice(0,n)/this.slice(n+1,this.length)
組成的新數組,這中間,剛好少了第n項。
slice方法: 返回一個數組的一段,兩個參數,分別指定開始和結束的位置。
*/
}
//我們來試一試這個自己增加的方法
var test=new Array(0,1,2,3,4,5);
test=test.del(3); //從0算起,這里也就是刪除第4項。
alert(test);
</script>
jquery:
賦值:$("#tmidtemp").attr("value","XXXXX")
得到值:$("#tmidtemp").attr("value")
dwr:
解析map結構數據:
function built_trademark_left(data){
var bar = document.getElementById('s1');
var optionitems="";
for(var property in data){
optionitems+="<option value='"+property+"'>"+data[property]+"</option>"; //property是key;data[property]是值
}
$(optionitems).appendTo(bar);
data=null;
}
css:
背景顏色漸變:
background:;filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#ffffff,endColorStr=#FFD922);
hibernate 用sql查詢
SQLQuery 在調用list()方法前要加addEntity(XX,XX) 或者 addScalar(XX,XX) 方法。
例如:
String sql = "select {tll.*},(select t.appn_no from Trademark t where t.id = tll.tmid) as appn_no,"
+"(select t.tm_type from Trademark t where t.id = tll.tmid) as tm_type,"
+"(select l.ref_no from licenagre l where l.id = tll.laid) as ref_no,"
+"(select l.tm_licensor from licenagre l where l.id = tll.laid) as tm_licensor "
+"from tmLnkLa tll";
SQLQuery sqlQuery = dao.getHibernateTemplate().getSessionFactory().openSession().createSQLQuery(sql);
sqlQuery.addEntity("tll", TmLnkLa.class);
sqlQuery.addScalar("appn_no", Hibernate.STRING);
sqlQuery.addScalar("tm_type", Hibernate.STRING);
sqlQuery.addScalar("ref_no", Hibernate.STRING);
sqlQuery.addScalar("tm_licensor", Hibernate.STRING);
List list = sqlQuery.list();
在多表查詢中,為避免字段同名問題,需要加 {XXX} 如上例中的 {tll.*},否則會出現類似: Invalid column name: id0_ 的錯誤
1. oncontextmenu="window.event.returnValue=false" 將徹底屏蔽鼠標右鍵
<table border oncontextmenu=return(false)><td>no</table> 可用于Table
2. <body onselectstart="return false"> 取消選取、防止復制
3. onpaste="return false" 不準粘貼
4. oncopy="return false;" oncut="return false;" 防止復制
5. <link rel="Shortcut Icon" href="favicon.ico"> IE地址欄前換成自己的圖標
6. <link rel="Bookmark" href="favicon.ico"> 可以在收藏夾中顯示出你的圖標
7. <input style="ime-mode:disabled"> 關閉輸入法
8. 永遠都會帶著框架
<script language="JavaScript"><!--
if (window == top)top.location.href = "frames.htm"; //frames.htm為框架網頁
// --></script>
9. 防止被人frame
<SCRIPT LANGUAGE=JAVASCRIPT><!--
if (top.location != self.location)top.location=self.location;
// --></SCRIPT>
10. 網頁將不能被另存為
<noscript><iframe src="/blog/*.html>";</iframe></noscript>
11. <input type=button value=查看網頁源代碼
onclick="window.location = "view-source:"+ "http://www.williamlong.info"">
12.刪除時確認
<a href="javascript:if(confirm("確實要刪除嗎?"))location="boos.asp?&areyou=刪除&page=1"">刪除</a>
13. 取得控件的絕對位置
//Javascript
<script language="Javascript">
function getIE(e){
var t=e.offsetTop;
var l=e.offsetLeft;
while(e=e.offsetParent)
alert("top="+t+"/nleft="+l);
}
</script>
//VBScript
<script language="VBScript"><!--
function getIE()
dim t,l,a,b
set a=document.all.img1
t=document.all.img1.offsetTop
l=document.all.img1.offsetLeft
while a.tagName<>"BODY"
set a = a.offsetParent
t=t+a.offsetTop
l=l+a.offsetLeft
wend
msgbox "top="&t&chr(13)&"left="&l,64,"得到控件的位置"
end function
--></script>
14. 光標是停在文本框文字的最后
<script language="javascript">
function cc()
{
var e = event.srcElement;
var r =e.createTextRange();
r.moveStart("character",e.value.length);
r.collapse(true);
r.select();
}
</script>
<input type=text name=text1 value="123" onfocus="cc()">
15. 判斷上一頁的來源
javascript:
document.referrer
(一).確認刪除用法:
1. BtnDel.Attributes.Add("onclick","return confirm('"+"確認刪除?"+"')");
2. linktempDelete.Attributes["onclick"]="javascript:return confirm('"+"確認刪除?"+"');";
3. private void grdProject_ItemDataBound(object sender, DataGridItemEventArgs e)
4.
{
if ((e.Item.ItemType == ListItemType.Item) | (e.Item.ItemType == ListItemType.AlternatingItem))
{
// 刪除按鈕上的提示部分
e.Item.Cells[10].Attributes.Add("onclick", "return confirm('確定刪除嗎?');");
}
}
5.
<script language="JavaScript" type="text/JavaScript">
function delete_y(e)
{
if(event.srcElement.outerText == "刪除")
event.returnValue=confirm("確定刪除?");
}
document.onclick=delete_y;
</script>
(二).跨語言字符串替換
System.Text.RegularExpressions.Regex.Replace(str1,@" <{1}[^ <>]*>{1}","").Replace(" ","").Replace("\","\\").Replace("-","-").Replace("&","&").Replace("<"," <").Replace(">",">").Replace("br","\n");
(三).關閉窗體
1.
this.btnClose.Attributes.Add("onclick", "window.close();return false;");
2.關閉本窗體間跳轉到另一個頁面
this.HyperLink1.NavigateUrl = "javascript:onclick=window.opener.location.assign
('" + "index.aspx"+ "?&Func=Edit&AutoID=" + intAutoid + ');window.close();";
3.關閉父窗體:
<INPUT type="reset" value=' <%=this._Cancel%>' onclick="window.parent.close()" Class="Button">
4.關閉本彈出窗體,并刷新父頁面
this.Response.Write(" <script language='javascript'>window.opener.location.reload();window.close(); </script>");
(四).Web MessageBox
1.
Response.Write(" <script language=javascript> window.alert('保存成功1'); </script>");
2.
Response.Write(" <script>alert('"+"保存成功!"+"'); </script>");
3.
this.Page.RegisterStartupScript("ChiName"," <script language='javascript'>alert('" + "保存成功!" + "') </script>");
(五).DataGrid中加CheckBox控件模板列.
請看: http://blog.csdn.net/chengking/archive/2005/10/08/497520.aspx
(六). window.open() 方法
語法:window.open(pageurl,name,parameters);
window對象的open()方法用于創建一個新的窗口實例,新創建的窗口的外觀由參數:parameters指定。新窗口中打開的文檔由參數: pageurl指定。系統能夠根據參數:name確定的名稱訪問該窗口。
下表為parameters參數表:
參數 衩始值 說明
alwaysLowered yes/no 指定窗口隱藏在所有窗口之下。
alwaysRaised yes/no 指定窗口浮在所有窗口之上。
dependent yes/no 指定打開的窗口為父窗口的一個了窗口。并隨父窗口的關閉而關閉。
directions yes/no 指定Navigator 2和3的目錄欄是否在新窗口中可見。
height pixel value 設定新窗口的像素高度。
hotkeys yes/no 在沒有菜單欄的新窗口設置安全退出熱鍵。
innerHeight pixel value 設置新窗口中文檔的像素高度。
innerWidth pixel value 設置新窗口中文檔的像素寬度。
location yes/ no 指明位置欄在新窗口中是否可見。
menubar yes /no 指明菜單欄在新窗口中是否可見。
outerHeight pixel value 設定窗口(包括裝飾邊框)的像素高度。
outerWidth pixel value 設定窗口(包括裝飾邊框)的像素寬度。
resizable yes /no 指明新窗口是否可以調整。
screenX pixel value 設定新窗口離屏幕邊界的像素長度。
screenY pixel value 設定新窗口離屏幕上邊界的像素長度。
scrollbars yes /no 指明滾動欄在新窗口中是否可見。
titlebar yes /no 指明菜單題目欄在新窗口是否可見。
toolbar yes /no 指明工具欄在新窗口中是否可見。
Width pixel value 設定窗口的像素寬度。
z-look yes /no 在文檔中包含各個 <pplet>標簽的數組。
fullscreen yes / no 打開的窗體是否進行全屏顯示
left pixel value 設定新窗口距屏幕左方的距離
top pixel value 設定新窗口距屏幕上方的距離
例子:
<html>
<head>
<title>window.open函數 </title>
</head>
<body>
<script language="javascript">
<!--
window.open("","name1","width=100,height=200,toolbar=no,scrollbars=no,menubar=no,screenX=100,screenY=100");
//-->
</script>
</body>
</html>
(七).location對象
href 整個URL字符串.
protocol 含有URL第一部分的字符串,如http:
host 包含有URL中主機名:端口號部分的字符串.如//www.cenpok.net/server/
hostname 包含URL中主機名的字符串.如http://www.cenpok.net
port 包含URL中可能存在的端口號字符串.
pathname URL中"/"以后的部分.如~list/index.htm
hash "#"號(CGI參數)之后的字符串.
search "?"號(CGI參數)之后的字符串.
(八).按鍵捕捉
1.Ctrl+Enter按鍵捕捉方法
<body onkeydown="doKeyDown()">
<script language="JavaScript">
<!--
function doKeyDown()
{
if (event.ctrlKey && event.keyCode == 13)
{
alert("You pressed the Ctrl + Enter")
}
}
//-->
</script>
</body>
2.Alt加快捷鍵: Alt+A
<button accessKey=A title="Alt+A" onclick="alert('Button clicked!')">Alt+A </button>
(九).控制輸入,非法字符不能輸入到TextBox.
<asp:textbox class="Text"
onkeypress="if (event.keyCode < 48 || event.keyCode >57) event.returnValue = false;"
id="txtY_Revenue" style="TEXT-ALIGN: right" runat="server" Width="90%" MaxLength="12">
</asp:textbox>
說明: 此方法控制TextBox只收數字:0~9 , 也自可以定義其它可輸入字符,如改成: 65~123,只允許輸入: a~z和A~Z 等.
[以下為收藏]
1>屏蔽功能類
1.1 屏蔽鍵盤所有鍵
<script language="javascript">
<!--
function document.onkeydown(){
event.keyCode = 0;
event.returnvalue = false;
}
-->
</script>
1.2 屏蔽鼠標右鍵
在body標簽里加上oncontextmenu=self.event.returnvalue=false
或者
<script language="javascript">
<!--
function document.oncontextmenu()
{
return false;
}
-->
</script>
function nocontextmenu()
{
if(document.all) {
event.cancelBubble=true;
event.returnvalue=false;
return false;
}
}
或者
<body onmousedown="rclick()" oncontextmenu= "nocontextmenu()">
<script language="javascript">
<!--
function rclick()
{
if(document.all) {
if (event.button == 2){
event.returnvalue=false;
}
}
}
-->
</script>
1.3 屏蔽 Ctrl+N、Shift+F10、F5刷新、退格鍵
<script language="javascript">
<!--
//屏蔽鼠標右鍵、Ctrl+N、Shift+F10、F5刷新、退格鍵
function window.onhelp(){return false} //屏蔽F1幫助
function KeyDown(){
if ((window.event.altKey)&&
((window.event.keyCode==37)|| //屏蔽 Alt+ 方向鍵 ←
(window.event.keyCode==39))){ //屏蔽 Alt+ 方向鍵 →
alert("不準你使用ALT+方向鍵前進或后退網頁!");
event.returnvalue=false;
}
/* 注:這還不是真正地屏蔽 Alt+ 方向鍵,
因為 Alt+ 方向鍵彈出警告框時,按住 Alt 鍵不放,
用鼠標點掉警告框,這種屏蔽方法就失效了。以后若
有哪位高手有真正屏蔽 Alt 鍵的方法,請告知。*/
if ((event.keyCode == 8) &&
(event.srcElement.type != "text" &&
event.srcElement.type != "textarea" &&
event.srcElement.type != "password") || //屏蔽退格刪除鍵
(event.keyCode==116)|| //屏蔽 F5 刷新鍵
(event.ctrlKey && event.keyCode==82)){ //Ctrl + R
event.keyCode=0;
event.returnvalue=false;
}
if ((event.ctrlKey)&&(event.keyCode==78)) //屏蔽 Ctrl+n
event.returnvalue=false;
if ((event.shiftKey)&&(event.keyCode==121)) //屏蔽 shift+F10
event.returnvalue=false;
if (window.event.srcElement.tagName == "A" && window.event.shiftKey)
window.event.returnvalue = false; //屏蔽 shift 加鼠標左鍵新開一網頁
if ((window.event.altKey)&&(window.event.keyCode==115)){ //屏蔽Alt+F4
window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px");
return false;}
}
/* 另外可以用 window.open 的方法屏蔽 IE 的所有菜單
第一種方法:
window.open("你的.htm", "","toolbar=no,location=no,directories=no,menubar=no,scrollbars=no,resizable=yes,status=no,top=0,left=0")
第二種方法是打開一個全屏的頁面:
window.open("你的.asp", "", "fullscreen=yes")
*/
//-->
</script>
1.4屏蔽瀏覽器右上角“最小化”“最大化”“關閉”鍵
<script language=javascript>
function window.onbeforeunload()
{
if(event.clientX>document.body.clientWidth&&event.clientY <0||event.altKey)
{
window.event.returnvalue = "";
}
}
</script>
或者使用全屏打開頁面
<script language="javascript">
<!--
window.open(www.32pic.com,"32pic","fullscreen=3,height=100, width=400, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no");
-->
</script>
注:在body標簽里加上onbeforeunload="javascript:return false"(使不能關閉窗口)
1.5屏蔽F5鍵
<script language="javascript">
<!--
function document.onkeydown()
{
if ( event.keyCode==116)
{
event.keyCode = 0;
event.cancelBubble = true;
return false;
}
}
-->
</script>
1.6屏蔽IE后退按鈕
在你鏈接的時候用 <a href="javascript:location.replace(url)">
1.7屏蔽主窗口滾動條
在body標簽里加上 style="overflow-y:hidden"
1.8 屏蔽拷屏,不斷地清空剪貼板
在body標簽里加上onload="setInterval('clipboardData.setData(\'Text\',\'\')',100)"
1.9 屏蔽網站的打印功能
<style>
@media print {
* { display: none }
}
</style>
1.10 屏蔽IE6.0 圖片上自動出現的保存圖標
方法一:
<META HTTP-EQUIV="imagetoolbar" CONTENT="no">
方法二:
<img galleryimg="no">
1.11 屏蔽頁中所有的script
<noscrript> </noscript>
2>表單提交驗證類
2.1 表單項不能為空
<script language="javascript">
<!--
function CheckForm()
{
if (document.form.name.value.length == 0) {
alert("請輸入您姓名!");
document.form.name.focus();
return false;
}
return true;
}
-->
</script>
2.2 比較兩個表單項的值是否相同
<script language="javascript">
<!--
function CheckForm()
if (document.form.PWD.value != document.form.PWD_Again.value) {
alert("您兩次輸入的密碼不一樣!請重新輸入.");
document.ADDUser.PWD.focus();
return false;
}
return true;
}
-->
</script>
2.3 表單項只能為數字和"_",用于電話/銀行帳號驗證上,可擴展到域名注冊等
<script language="javascript">
<!--
function isNumber(String)
{
var Letters = "1234567890-"; //可以自己增加可輸入值
var i;
var c;
if(String.charAt( 0 )=='-')
return false;
if( String.charAt( String.length - 1 ) == '-' )
return false;
for( i = 0; i < String.length; i ++ )
{
c = String.charAt( i );
if (Letters.indexOf( c ) < 0)
return false;
}
return true;
}
function CheckForm()
{
if(! isNumber(document.form.TEL.value)) {
alert("您的電話號碼不合法!");
document.form.TEL.focus();
return false;
}
return true;
}
-->
</script>
2.4 表單項輸入數值/長度限定
<script language="javascript">
<!--
function CheckForm()
{
if (document.form.count.value > 100 || document.form.count.value < 1)
{
alert("輸入數值不能小于零大于100!");
document.form.count.focus();
return false;
}
if (document.form.MESSAGE.value.length <10)
{
alert("輸入文字小于10!");
document.form.MESSAGE.focus();
return false;
}
return true;
}
//-->
</script>
2.5 中文/英文/數字/郵件地址合法性判斷
<SCRIPT LANGUAGE="javascript">
<!--
function isEnglish(name) //英文值檢測
{
if(name.length == 0)
return false;
for(i = 0; i < name.length; i++) {
if(name.charCodeAt(i) > 128)
return false;
}
return true;
}
function isChinese(name) //中文值檢測
{
if(name.length == 0)
return false;
for(i = 0; i < name.length; i++) {
if(name.charCodeAt(i) > 128)
return true;
}
return false;
}
function isMail(name) // E-mail值檢測
{
if(! isEnglish(name))
return false;
i = name.indexOf("@");
j = name.lastIndexOf("@");
if(i == -1)
return false;
if(i != j)
return false;
if(i == name.length)
return false;
return true;
}
function isNumber(name) //數值檢測
{
if(name.length == 0)
return false;
for(i = 0; i < name.length; i++) {
if(name.charAt(i) < "0" || name.charAt(i) > "9")
return false;
}
return true;
}
function CheckForm()
{
if(! isMail(form.Email.value)) {
alert("您的電子郵件不合法!");
form.Email.focus();
return false;
}
if(! isEnglish(form.name.value)) {
alert("英文名不合法!");
form.name.focus();
return false;
}
if(! isChinese(form.cnname.value)) {
alert("中文名不合法!");
form.cnname.focus();
return false;
}
if(! isNumber(form.PublicZipCode.value)) {
alert("郵政編碼不合法!");
form.PublicZipCode.focus();
return false;
}
return true;
}
//-->
</SCRIPT>
2.6 限定表單項不能輸入的字符
<script language="javascript">
<!--
function contain(str,charset)// 字符串包含測試函數
{
var i;
for(i=0;i <charset.length;i++)
if(str.indexOf(charset.charAt(i))>=0)
return true;
return false;
}
function CheckForm()
{
if ((contain(document.form.NAME.value, "%\(\)> <")) || (contain(document.form.MESSAGE.value, "%\(\)> <")))
{
alert("輸入了非法字符");
document.form.NAME.focus();
return false;
}
return true;
}
//-->
</script>
1.錢不是問題,問題是沒錢!
2.喝醉了我誰也不服,我就扶墻!
3.我就像一只趴在玻璃上的蒼蠅,前途一片光明,但又找不到出路.
4.大師兄,你知道嗎?二師兄的肉現在比師傅的都貴了
5.如果多吃魚可以補腦讓人變聰明的話,那么你至少得吃一對兒鯨魚……
6.水至清則無魚,人至賤則無敵。
7.青春就像衛生紙,看著挺多得,用著用著就不夠了~
8.懷才就像懷孕,時間久了才能讓人看出來。
9.我身邊的朋友們啊,你們快點出名吧,這樣我的回憶錄就可以暢銷了~~~
10.同事去見客戶,可能是緊張,一開口便是:“劉先生你好,請問你貴姓啊?”汗啊~~~~~~
11.一女同學黑了些,她男友又太白了些,有天宿舍里得毒舌天后突然對她冒出一句:“你們這樣不行,你們會生出斑馬來的”
12.老娘一向視帥哥與金錢如糞土,而他們也一直是這樣看我的
13.不要和我比懶,我懶得和你比
14.我不是個隨便的人 我隨便起來不是人
15.上帝說,要有光,我說我反對,從此世界上有了黑暗
16.今天心情不好.我只有四句話想說.包括這句和前面的兩句.我的話說完了......
17.做人就要做一個徘徊在牛A和牛C之間的人
18.我的大名叫上帝,小名叫耶穌,英文名God, 法號是如來...
19.人不能在一棵樹上吊死,要在附近幾棵樹上多死幾次試試
20.樹不要皮,必死無疑;人不要臉,天下無敵。
21.農夫三拳有點疼
22.其實我一直很受人歡迎的:小時候的我人見人愛,如今的我人賤人愛
23.不怕虎一樣的敵人,就怕豬一樣的隊友
24.走自己的路,讓別人打車去吧
25.老鼠扛刀,滿街找貓
26.只要功夫深,拉屎也認真
27.中國人誰跑的最快?是曹操(非劉翔)。因為說曹操曹操到
28.思想有多遠,你就給我滾多遠
29.只有在火車站大排長龍時,才能真正意識到自己是“龍的傳人”。
30.有情人終成家屬
31.春天來了,一群大雁正向北飛,一會兒排成B字型,一會兒排成T字型..
32.在哪里跌倒 就在哪里躺下
33.老虎不發威 你當我是HELLO KITTY!
34.驢是的念來過倒~
1.吃了辣的東西,感覺就要被辣死了,就往嘴里放上少許鹽,含一下,吐掉,漱下口,就不辣了;
2.牙齒黃,可以把花生嚼碎后含在嘴里,并刷牙三分鐘,很有效;
3.若有小面積皮膚損傷或者燒傷、燙傷,抹上少許牙膏,可立即止血止痛;
4.經常裝茶的杯子里面留下難看的茶漬,用牙膏洗之,非常干凈;
5.仰頭點眼藥水時微微張嘴,這樣眼睛就不會亂眨了;
6.嘴里有潰瘍,就用維生素C貼在潰瘍處,等它溶化后潰瘍基本就好了;
7.眼睛進了小灰塵,閉上眼睛用力咳嗽幾下,灰塵就會自己出來;
8.洗完臉后,用手指沾些細鹽在鼻頭兩側輕輕按摩,然后再用清水沖洗,黑頭和粉刺就會清除干凈,毛細孔也會變小;
9.剛剛被蚊子咬完時,涂上肥皂就不會癢了;
10.如果嗓子、牙齦發炎了,在晚上把西瓜切成小塊,沾著鹽吃,記得一定要是晚上,當時癥狀就會減輕,第二天就好了;
11.吹風機對著標簽吹,等吹到商標的膠熱了,就可以很容易的把標簽撕下來;
12.旅行帶衣服時如果怕壓起褶皺,可以把每件衣服都卷成卷;
13.打打嗝時就喝點醋,立桿見影;
14.吃了有異味的東西,如大蒜、臭豆腐,吃幾顆花生米就好了;
15.治療咳嗽,特別是干咳,晚上睡覺前,用純芝麻香油煎雞蛋,油放稍多些,什么調味料都不要放,趁熱吃過就去睡覺,連吃幾天效果很明顯;
16.手腕長粗的MM想帶較細的手鐲,就不能硬帶,應把手上套上一個塑料袋再帶上手鐲,非常好帶,也不會把手弄疼,取下也是同樣的方法;
17.栗子皮難剝,先把外殼剝掉,再把它放進微波爐轉一下,拿出后趁熱一搓,皮就掉了;
18.插花時,在水里滴上一滴洗潔精,可以維持好幾天;
19.把核桃放進鍋里蒸十分鐘,取出放在涼水里再砸開,就能取出完整的桃核仁了;
20.把蝦仁放進碗里,加一點精鹽、食用堿粉,用手抓搓一會兒后用清水浸泡,然后再用清水沖洗,即能使炒出的蝦仁透明如水晶,爽嫩可口;
21.炒肉時,先把肉用小蘇打水浸泡十幾分鐘,倒掉水,再入味,炒出來會很嫩滑;
22.將殘茶葉浸入水中數天后,澆在植物根部,可促進植物生長;
23.把殘茶葉曬干,放到廁所或者溝渠里燃熏,可消除惡臭,具有驅除蚊子蒼蠅的功能;
24.夾生飯重煮法:可用筷子在飯內扎些直通鍋底的孔,灑入少許黃酒重燜,
25.若只表面夾生,只要將表層翻到中間再燜即可;
26.巧除紗窗油膩:將洗衣服、吸煙剩下的煙頭一起放在水里,待溶解后,拿來擦玻璃窗、紗窗,效果真不錯;
27.只要在珠寶盒中放上一節小小的粉筆,即可讓首飾常保光澤;
28.桌子、瓶子表面的不干膠痕跡用風油精可以擦拭;
29.出門時隨時在包里帶一節小的干電池,若裙子帶靜電,就把電池的正極在裙子上面擦幾下即可去掉靜電;
30.不管是鞋子的哪個地方磨到了你的腳,你就在鞋子磨腳的地方涂一點點白酒,保證就不磨腳了;
31.亨調蔬菜時,如果必須要焯,焯好菜的水最好盡量利用。如做水餃的菜,焯好的水可適量放在肉餡里,這樣既保證營養,又使水餃餡味美有湯;
32.夏天足部容易出汗,每天用淡鹽水泡腳可有效應對汗腳;
33.夏天游泳后曬曬太陽,可防肌膚勞損等疾病發生;
34.夏天枕頭易受潮滋生霉菌,時常曝曬枕芯有利健康;
35.多吃薏米小豆粥等潮濕健脾,可防暑濕;
36.防失眠:睡前少講太多話,忌飲濃茶,睡前勿大用腦,可用熱水加醋洗腳;
37.金銀花有疏散風濕功效,金銀花水煎取汁涼后與蜂蜜沖調可解暑;
38.吃過于肥膩的食物后喝茶,能刺激自律神經,促進脂肪代謝;
39.睡眠不足會變笨,一天需要睡眠八小時,有午睡習慣可延緩衰老;
40.雙手易變得干燥粗糙,用醋泡手十分鐘可護膚;
41.夏天擦拭涼席,用滴加了花露水的清水擦拭涼席,可使涼席保持清爽潔凈。當然,擦拭時最好沿著涼席紋路進行,以便花露水滲透到涼席的紋路縫隙,這樣清涼舒適的感覺會更持久;
42.早餐多食西紅柿、檸檬酸等酸性蔬菜和水果,有益于養肝;
43.爽身止癢洗頭或洗澡時,在水中加五六滴花露水,能起到很好的清涼除菌、祛痱止癢作用;
44.葡萄含有睡眠輔助激素,常食有助睡眠;
45.夏天多喝番茄湯既可獲得養料,又能補充水分,番茄湯應燒好并冷卻后再喝,所含番茄紅素有一定的抗前列腺癌和保護心肌的功效,最適合于男子;吃酸性物質馬上刷牙會損害牙齒健康;
46.因外傷碰破皮肉時,在傷處涂上牙膏進行消炎、止血,再包扎,作為臨時急救藥,以藥物牙膏效果最為顯著;
47.將白醋噴灑在菜板上,放上半小時后再洗,不但能殺菌,還能除味;
48.喝酸奶能解酒后煩躁,酸奶能保護胃黏膜、延緩酒精吸收,并且含鈣豐富,對緩解酒后煩躁尤其有效;
49.皮鞋包皮放久了發霉時,可用軟布蘸酒精加水(1:1)溶液擦拭即可;
50.發生頭痛、頭暈時,可在太陽穴涂上牙膏,因為牙膏含有薄荷腦、丁香油可鎮痛;
51.蠟燭冷凍二十四小時后,再插到生日蛋糕上,點燃時不會流下燭油;
52.白色衣褲洗后易泛黃,可取一盆清水,滴上二三滴藍墨水,將洗過的衣褲在浸泡一刻鐘,不必擰干,就放在太陽下曬,即可潔白干凈;
53.過多食用生蔥蒜會刺激口腔腸胃,不利健康,最好加一點醋再食用;
54.及時補充水分但應少喝果汁、可樂、雪碧、汽水等飲料,含有較多的糖精和電解質,喝多了會對腸胃產生不良刺激,影響消化和食欲。因此夏天應多喝白開水或淡鹽(糖)水;
55.每天早晨用豆腐摩擦面部幾分鐘,堅持一個月,面部會變得很滋潤;
56.空調室內溫差不宜超過五度,即使天氣再熱,空調室內溫度也不宜到24度以下;
57.加酶洗衣粉劑放在溫水中需要較長的分解時間才能使洗衣效果更佳;
58.夏天,人的活動時間變長,出汗多,耗能過大,應適當多吃雞、鴨、瘦肉、魚類、蛋類等營養食品,以滿足人體的代謝需要;
59.頭痛時把蘋果磨成泥狀涂在紗布上,貼在頭痛處,癥狀可減輕;
60.皮包上有污漬,可以用棉花蘸風油精擦拭。
關鍵字: jbpm jpdl 部署 tomcat mysql 工作流
相關資料:
《jBPM學習筆記(流程設計與控制)》
《jBPM學習筆記(框架設計簡介)》
系統平臺:
系統環境:
Windows 2003 | SUN JDK1.6U4 | Tomcat6.0.14 | jbpm-starters-kit-3.1.4 | MySQL 6.0
主機完整名稱:
zsy-aten
瀏覽器
Internet Explorer 6.0
安裝包及相關軟件:
1、 安裝JDK與MySQL
JDK的安裝這里就不多說了,學過Java的人都知道,本實驗安裝的是jdk-6u4版本。安裝完后記得添加JAVA_HOME的環境變量。
MySQL的安裝不屬于本文的介紹范圍,請參閱相關文檔。本實驗安裝的是MySQL 6.0版本,安裝完后建立的數據庫名為jbpm,創建的用戶名為jbpmuser,密碼為shine。
2、 安裝Tomcat
下載安裝Tomcat-6.0.16是目前最新版本:http://apache.mirror.phpchina.com/tomcat/tomcat-6/v6.0.16/bin/apache-tomcat-6.0.16.exe ;要在JDK安裝之后安裝Tomcat,安裝過程中會自動搜索JRE的目錄,當然也可以選擇其它的JRE,其它默認設置即可。
3、 安裝Ant
Ant 是一個編譯工具,使用 jBPM 時必須用它來編譯文件, jBPM 中的很多操作都要用到 Ant ,安裝方法如下:
(1) 先下載:http://apache.mirror.phpchina.com/ant/binaries/apache-ant-1.7.0-bin.zip;
(2) 解壓到 E:\Java\tools\apache-ant-1.7.0 (當然其他目錄也可以);
(3) 設置環境變量:ANT_HOME= E:\Java\tools\apache-ant-1.7.0;
(4)把 %ANT_HOME%\bin 加入到環境變量 PATH 中。
4、 安裝jBPM
下載jBPM-JPDL本為3.2.2:http://labs.jboss.com/jbossjbpm/jbpm_downloads/下載jPDL Suite版,這個版本是包含所有的一整套工具,下載后是個壓縮包解壓到 E:\Java\tools :、\jbpm-jpdl-3.2.2 ,目錄下主要包含以下幾個子目錄:
l src —— jBPM 的源代碼
l config —— jBPM及Hibernate與log4j的配置文件
l db —— 各種數據庫的建表SQL語句
l lib —— 依賴的第三方依賴類庫
l doc —— API文檔及用戶使用向導
l designer —— 輔助開發 jBPM 的 Eclipse 插件,具體在 eclipse子目錄中
l server —— 一個已經配置好了的基于 JBoss 的 jBPM 控制臺及示例
5、 安裝Eclipse及jBPM開發插件
Eclipse不是開發 jBPM 必須的工具,但它是對 jBPM 開發很有幫助的工具,特別是 jBPM 提供了一個 Eclipse 插件用來輔助開發 jBPM 。關于 Eclipse 的安裝請參閱相關文檔。本實驗安裝的是MyEclipse6.0集成Eclipse3.3。
安裝完Eclipse安裝jBPM的開發插件,步驟如下:
(1) 打開Eclipse選擇菜單“Help->Software Updates->Find and Install”;
(2) 彈出窗口中選擇“Search for new features to install”,然后點擊“Next >”;如圖
(3) 點擊按扭“New Local Site…”選擇插件目錄,位于designer\ eclipse目錄下,如:E:\Java\tools\jbpm-jpdl-3.2.2\designer\eclipse。選定后點“OK”,如圖
(4) 選中“designer/eclipse”,然后點擊“Finish”,如圖
(5) 然后選擇同意條款,接提示步驟安裝就可以了。
到此為止需要的所有工具都安裝好了。接下來先體驗一下jBPM工作流。在 JBoss jBPM Starters Kit 的 jbpm-server 目錄是一個已經在JBoss中配置好的了 jBPM 示例,雙擊 jbpm-server 目錄下的 start.bat 文件,啟動 JBoss 服務。打開網頁: http://localhost:8080/ jbpm-console 得到如下頁面:

這是一個流程控制管理平臺,用右邊的賬號與密碼就可以登錄,這個控制臺包括流程管理,可以部署流程、刪除流程、查看流程圖、管理流程實例等;還有任務管理,工作管理及用戶與用戶組管理。
基于Tomcat和MySQL的部署:
現在要把上面演示的例子部署到Tomcat中,并將數據數配置為MySQL。
STEP 1,初始化數據庫
jBPM 需要數據庫支持, jBPM 會把自己的一個初始化數據存儲到數據庫,同時工作流的數據也是存儲到數據庫中的。 jBPM 使用 Hibernate 作為的存儲層。在E:\Java\tools\jbpm-jpdl-3.2.2\db\目錄下有個jbpm.jpdl.mysql.sql數據庫腳本文件。我們不能直接導入該文件, 會提示有錯誤, 應為該文件格式有問題, 首先打開該文件(推薦UltraEdit), 把前面的 alter table JBPM_XX 語句都刪除(因為我們使用的是新的數據庫,所以需要這些語句, 這個腳本文件是升級3.2的數據庫表結構用的) 然后在每一行前面添加一個分號 不然腳本執行會出錯。這樣就可以用source命令導入了。 導入后, 表結構創建成功。
STEP 2,準備發布包
在E:\Java\tools\jbpm-jpdl-3.2.2\deploy 文件夾下 運行ant customize.console.for.tomcat。執行命令后會在 E:\Java\tools\jbpm-jpdl-3.2.2\deploy\customized文件夾下生成一個jbpm-console.war 文件,用WinRaR解壓開,并復制到已安裝Tomcat的webapps目錄下,jbpm還需三個依賴類庫,分別是commons-collections.jar、ehcache-1.2.3.jar、jta.jar,當然還有個MySQL驅動mysql-connector-java-5.0.7-bin.jar,添加這些jar文件 到 \$CATALINA_HOME\webapps\jbpm-console\WEB-INF\lib目錄下。
STEP 3,修改Hibernate數據庫配置文件
修改\$CATALINA_HOME\webapps\jbpm-console\WEB-INF\classes下hibernate.cfg.xml文件。這是Hibernate的數據庫配置文件,要做一些修改,原來內容如下:
<!-- hibernate dialect -->
<property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>
<!-- JDBC connection properties (begin) ===
<property name="hibernate.connection.driver_class">
org.hsqldb.jdbcDriver</property>
<property name="hibernate.connection.url">jdbc:hsqldb:mem:jbpm</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password"></property>
==== JDBC connection properties (end) -->
<property name="hibernate.cache.provider_class">
org.hibernate.cache.HashtableCacheProvider</property>
<!-- DataSource properties (begin) -->
<property name="hibernate.connection.datasource">java:/JbpmDS</property>
<!-- DataSource properties (end) --> |
修改后如下:
<!-- hibernate dialect -->
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLInnoDBDialect</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/jbpm</property>
<property name="hibernate.connection.username">jbpmuser</property>
<property name="hibernate.connection.password">shine</property>
<property name="hibernate.cache.provider_class">
org.hibernate.cache.HashtableCacheProvider</property> |
STEP 4,設置Tomcat安全域
有兩種方法都可以實現,但摧薦第一種方法。
方法一:配置一個JDBC Realm,在\$CATALINA_HOME\webapps\jbpm-console\META-INF目錄下新建context.xml文件,內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Realm className="org.apache.catalina.realm.JDBCRealm"
driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/jbpm"
connectionName="jbpmuser"
connectionPassword="shine"
userTable="JBPM_ID_USER u, JBPM_ID_MEMBERSHIP m, JBPM_ID_GROUP g"
userNameCol="g.TYPE_ = 'security-role' AND m.GROUP_ = g.ID_ AND m.USER_ = u.ID_ AND u.NAME_"
userCredCol="DISTINCT u.PASSWORD_"
userRoleTable="JBPM_ID_USER u, JBPM_ID_MEMBERSHIP m, JBPM_ID_GROUP g"
roleNameCol="g.NAME_" />
</Context> |
方法二:直接修改 /$CATALINA_HOME/conf/tomcat-users.xml文件來設置安全域。為了不和tomcat已有的用戶沖突,這里把 tomcat以前的登陸帳號username="admin" 修改為username="tadmin",修改后的文件如下:
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="user"/>
<role rolename="administrator"/>
<role rolename="manager"/>
<role rolename="sales"/>
<role rolename="hr"/>
<role rolename="admin"/>
<role rolename="participant"/>
<user username="user" password="user" roles="user,sales"/>
<user username="shipper" password="shipper" roles="user,hr"/>
<user username="manager" password="manager" roles="admin,hr,manager,user,sales"/>
<user username="tadmin" password="" roles="admin,manager"/>
<user username="admin" password="admin" roles="admin,user,hr"/>
</tomcat-users> |
STEP 5,初始化基礎的用戶數據
在MySQL數據庫中執行以下SQL語句,進行初始化用戶信息,如下:
INSERT INTO JBPM_ID_GROUP VALUES(1,'G','sales','organisation',NULL);
INSERT INTO JBPM_ID_GROUP VALUES(2,'G','admin','security-role',NULL);
INSERT INTO JBPM_ID_GROUP VALUES(3,'G','user','security-role',NULL);
INSERT INTO JBPM_ID_GROUP VALUES(4,'G','hr','organisation',NULL);
INSERT INTO JBPM_ID_GROUP VALUES(5,'G','manager','security-role',NULL);
INSERT INTO JBPM_ID_USER VALUES(1,'U','user','user@sample.domain','user');
INSERT INTO JBPM_ID_USER VALUES(2,'U','manager','manager@sample.domain','manager');
INSERT INTO JBPM_ID_USER VALUES(3,'U','admin','admin@sample.domain','admin');
INSERT INTO JBPM_ID_USER VALUES(4,'U','shipper','shipper@sample.domain','shipper');
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(1,'M',NULL,NULL,2,4);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(2,'M',NULL,NULL,3,4);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(3,'M',NULL,NULL,4,4);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(4,'M',NULL,NULL,4,3);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(5,'M',NULL,NULL,1,3);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(6,'M',NULL,NULL,2,3);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(7,'M',NULL,NULL,3,3);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(8,'M',NULL,NULL,3,2);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(9,'M',NULL,NULL,2,2);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(10,'M',NULL,NULL,2,5);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(11,'M',NULL,'boss',2,1);
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(12,'M',NULL,NULL,1,1); |
STEP 6,啟動Tomcat服務
啟動時查看Tomcat的日志,檢查是否正常啟動,未添加所有支持庫或數據庫配置出錯,都會引起啟動失敗。
注意:到此為止啟動Tomcat,JBPM服務就能正常運行了,已經可以在上面發布流程,接著第五步中部署一個jbpm自帶的流程例子。
STEP 7,發布例子流程
打開網頁:http://localhost:8080/jbpm 得到如下頁面就說明已經部署成功:
用右邊的manage賬號登錄,如下圖:

點擊“Deploy”轉到部署流程頁面,點擊“瀏覽”按扭選擇E:\Java\tools\jbpm-jpdl-3.2.2\examples\websale\target\websale.jpdl文件,名后點擊“Deploy”按扭部署。
|