建議可以安裝FindBugs,
可以幫助我們找到一些意想不到的臭蟲與安全漏洞!
FindBugs™ - Find Bugs in Java Programs
http://findbugs.sourceforge.net/
FindBugs downloads
http://findbugs.sourceforge.net/downloads.html
[工具介紹] Java程式檢測工具 (二) - FindBugs
http://cyrilwang.blogspot.com/2009/09/java-findbugs.html
Code Analysis Tools
http://java.ociweb.com/javasig/knowledgebase/2010-04/index.html
2010年11月25日 星期四
2010年11月18日 星期四
Microsoft Office 不是正版
怪怪,明明就是正版,
不知道序號是被那個好事之人拿去用..
每一啟動 Office 軟體就會出現警告訊息
只能請他先閉嘴
執行下面移除 Office Genuine Advantage (OGA) 的程序。
msiexec.exe /uninstall {B2544A03-10D0-4E5E-BA69-0362FFC20D18}
總算不會再哈拉了..
不知道序號是被那個好事之人拿去用..
每一啟動 Office 軟體就會出現警告訊息
只能請他先閉嘴
執行下面移除 Office Genuine Advantage (OGA) 的程序。
msiexec.exe /uninstall {B2544A03-10D0-4E5E-BA69-0362FFC20D18}
總算不會再哈拉了..
2010年11月17日 星期三
SVN integrated with Apache
SVN Server 本身可與 Apache 結合在一起
主要是利用 兩個 mod
分別是
mod_dav_svn.so
mod_authz_svn.so
SVN 安裝好就不要動他
使用者透過 http 訪問時
會跟 Apache 要登錄帳號及存取 svn
這時透過 httpd.conf 設定
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
而 httpd.conf 要存取的 svn 的範例
DAV svn
SVNPath E:\SVN\Product\express
AuthType Basic
AuthName OmniWiseInside
AuthUserFile E:\SVN\passwdInside
Require user Jason
Require user Jimmy
Require user Joy
Require user June
有時會遇到 Apache 啟動不起來
Cannot load /etc/httpd/modules/mod_dav_svn.so into server
主要原因有二
1. mod_dav_svn.so 及 mod_authz_svn.so 不存在於 Apache modules 中
2. mod_dav_svn.so 及 mod_authz_svn.so 所需要的 .dll 不存在於 Apache bin 中
第一個可以在 SVN 中找一下這幾個檔案並複製到 modules
第二個問題可以在 SVN 中 bin 的 .dll copy 到 Apache bin 中 (若存在不要蓋過去,不夠的再 copy 過去)

主要是利用 兩個 mod
分別是
mod_dav_svn.so
mod_authz_svn.so
SVN 安裝好就不要動他
使用者透過 http 訪問時
會跟 Apache 要登錄帳號及存取 svn
這時透過 httpd.conf 設定
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
而 httpd.conf 要存取的 svn 的範例
DAV svn
SVNPath E:\SVN\Product\express
AuthType Basic
AuthName OmniWiseInside
AuthUserFile E:\SVN\passwdInside
Require user Jason
Require user Jimmy
Require user Joy
Require user June
有時會遇到 Apache 啟動不起來
Cannot load /etc/httpd/modules/mod_dav_svn.so into server
主要原因有二
1. mod_dav_svn.so 及 mod_authz_svn.so 不存在於 Apache modules 中
2. mod_dav_svn.so 及 mod_authz_svn.so 所需要的 .dll 不存在於 Apache bin 中
第一個可以在 SVN 中找一下這幾個檔案並複製到 modules
第二個問題可以在 SVN 中 bin 的 .dll copy 到 Apache bin 中 (若存在不要蓋過去,不夠的再 copy 過去)
2010年11月14日 星期日
asp:Button 搭配 UseSubmitBehavior 屬性 行為觀察
1. asp:Button 搭配 UseSubmitBehavior 屬性 行為觀察
UseSubmitBehavior="false" 配上 OnClientClick="return onClientClick()"
表面上就是讓 Asp:Button 不會執行 Postback (不論回傳的 script 是 true/ false, 只會乖乖的執行 script 內容)
實際上事後端的產生的 Script 檔下來 Postback 後面的內容
ASP.NET 會產生 return onClientClick();__doPostBack('Button1','') 的 Runtime script
由於 return 命令在 __doPostBack('Button1','') 之前
因此 __doPostBack('Button1','') 不會被執行
執行起來就像是一般的 Button <input type="button">
UseSubmitBehavior="true"
會執行 Javascript 但是只有 script 回傳結果為 true 時, 系統才會執行 Server 端的 script
如同一般 <input type="submit">
asp:ImageButton 與 asp:Button UseSubmitBehavior="true" 是一樣的結果
protected void Button1_Click(object sender, EventArgs e)
{ Response.Write("CLICK1"); }
protected void Button2_Click(object sender, EventArgs e)
{ Response.Write("CLICK2"); }
function onClientClick() {
if (confirm('Run Server Script'))
{
alert("YES");
return true;
} else {
alert("NO");
return false;
}
}
<asp:Button ID="Button1" runat="server" CommandArgument="1" onclick="Button1_Click" Text="Button1" UseSubmitBehavior="false" OnClientClick="return onClientClick()"/>
<asp:Button ID="Button2" runat="server" CommandArgument="2" onclick="Button2_Click" Text="Button2" OnClientClick="return onClientClick()"/>
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="Query.jpg" OnClientClick="return onClientClick()" onclick="ImageButton1_Click" style="height: 16px" />
2. Runtime result
<input type="button" name="Button1" value="Button1" onclick="return onClientClick();__doPostBack('Button1','')" id="Button1" />
<input type="submit" name="Button2" value="Button2" onclick="return onClientClick();" id="Button2" />
<input type="image" name="ImageButton1" id="ImageButton1" src="Query.jpg" onclick="return onClientClick();" style="border-width:0px;height: 16px" />
3. 容易出錯的地方
OnClientClick="return onClientClick()"
寫成
OnClientClick="onClientClick"
Script engine 找不到一個叫做 onClientClick 的 function,
因此這段 Button1, Button2, ImageButton1 直接 Postback 給 Server
或是
OnClientClick="onClientClick()"
Script engine 會找到一個 onClientClick() 的 function 並執行這段 script
接著再執行 __doPostBack('Button1','') (若是 UseSubmitBehavior="true")
但是不管 onClientClick() 的結果
Button1, Button2, ImageButton1 最後還是會 Postback 給 Server
4. 結論
Button/ ImageButton 務必以 return onClientClick(); 方式呼叫
若程式不需要被 postback, onClienClick()
最後傳回 return false;
告知系統不需要 postback
UseSubmitBehavior="false" 配上 OnClientClick="return onClientClick()"
表面上就是讓 Asp:Button 不會執行 Postback (不論回傳的 script 是 true/ false, 只會乖乖的執行 script 內容)
實際上事後端的產生的 Script 檔下來 Postback 後面的內容
ASP.NET 會產生 return onClientClick();__doPostBack('Button1','') 的 Runtime script
由於 return 命令在 __doPostBack('Button1','') 之前
因此 __doPostBack('Button1','') 不會被執行
執行起來就像是一般的 Button <input type="button">
UseSubmitBehavior="true"
會執行 Javascript 但是只有 script 回傳結果為 true 時, 系統才會執行 Server 端的 script
如同一般 <input type="submit">
asp:ImageButton 與 asp:Button UseSubmitBehavior="true" 是一樣的結果
protected void Button1_Click(object sender, EventArgs e)
{ Response.Write("CLICK1"); }
protected void Button2_Click(object sender, EventArgs e)
{ Response.Write("CLICK2"); }
function onClientClick() {
if (confirm('Run Server Script'))
{
alert("YES");
return true;
} else {
alert("NO");
return false;
}
}
<asp:Button ID="Button1" runat="server" CommandArgument="1" onclick="Button1_Click" Text="Button1" UseSubmitBehavior="false" OnClientClick="return onClientClick()"/>
<asp:Button ID="Button2" runat="server" CommandArgument="2" onclick="Button2_Click" Text="Button2" OnClientClick="return onClientClick()"/>
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="Query.jpg" OnClientClick="return onClientClick()" onclick="ImageButton1_Click" style="height: 16px" />
2. Runtime result
<input type="button" name="Button1" value="Button1" onclick="return onClientClick();__doPostBack('Button1','')" id="Button1" />
<input type="submit" name="Button2" value="Button2" onclick="return onClientClick();" id="Button2" />
<input type="image" name="ImageButton1" id="ImageButton1" src="Query.jpg" onclick="return onClientClick();" style="border-width:0px;height: 16px" />
3. 容易出錯的地方
OnClientClick="return onClientClick()"
寫成
OnClientClick="onClientClick"
Script engine 找不到一個叫做 onClientClick 的 function,
因此這段 Button1, Button2, ImageButton1 直接 Postback 給 Server
或是
OnClientClick="onClientClick()"
Script engine 會找到一個 onClientClick() 的 function 並執行這段 script
接著再執行 __doPostBack('Button1','') (若是 UseSubmitBehavior="true")
但是不管 onClientClick() 的結果
Button1, Button2, ImageButton1 最後還是會 Postback 給 Server
4. 結論
Button/ ImageButton 務必以 return onClientClick(); 方式呼叫
若程式不需要被 postback, onClienClick()
最後傳回 return false;
告知系統不需要 postback
2010年11月13日 星期六
Telerik RadGrid Page Navigator 中文化
這是我設計的 Telerik RadGrid Page Navigation Style 中文化訊息
It's my design for "Telerik RadGrid Page Navigation Style" in Madarin
歡迎使用/ Welcome to use.
Philip Chen
<PagerStyle NextPageText="下一頁" PrevPageText="上一頁" FirstPageToolTip="第一頁" LastPageToolTip="最末頁"
NextPagesToolTip="下一頁" NextPageToolTip="下一頁" PagerTextFormat="變更頁數: {4} &nbsp;頁數 <strong>{0}</strong> / <strong>{1}</strong>, <strong> 共 {5} 筆記錄</strong>." PageSizeLabelText="每頁筆數" PrevPagesToolTip="上一頁" PrevPageToolTip="上一頁" />
It's my design for "Telerik RadGrid Page Navigation Style" in Madarin
歡迎使用/ Welcome to use.
Philip Chen
<PagerStyle NextPageText="下一頁" PrevPageText="上一頁" FirstPageToolTip="第一頁" LastPageToolTip="最末頁"
NextPagesToolTip="下一頁" NextPageToolTip="下一頁" PagerTextFormat="變更頁數: {4} &nbsp;頁數 <strong>{0}</strong> / <strong>{1}</strong>, <strong> 共 {5} 筆記錄</strong>." PageSizeLabelText="每頁筆數" PrevPagesToolTip="上一頁" PrevPageToolTip="上一頁" />
2010年11月12日 星期五
如何將 RadioGroupItem Item 隱藏
在 .NET 中
RadioGroupItem 物件中的 Item 要從畫面中隱藏
有幾種作法
1. Remove
radioOption.Items.Remove(radioOption.Items.FindByValue("APPROVE"));
這是將 Item 中有一個 Value 為 APPROVE 的項目移去
眼不見為靜
但是缺點在於在 ViewState 過程中他就不會再出現了
破壞容易, 但是需要再把他救回來, 原先的 Attribute/ Checked 等選項還要補上去
2. CSS 策略
在 CSS 中加入
.hidden
{ display:none; }
程式中加入 Attribute
radioOption.Items.FindByValue("APPROVE").Attributes.Add("class", "hidden");
之後程式需要在顯示
radioOption.Items.FindByValue("APPROVE").Attributes.Remove("class");
我比較喜歡用後面這招
雖然空間多浪費一點
但是程式控制能力比較好..
RadioGroupItem 物件中的 Item 要從畫面中隱藏
有幾種作法
1. Remove
radioOption.Items.Remove(radioOption.Items.FindByValue("APPROVE"));
這是將 Item 中有一個 Value 為 APPROVE 的項目移去
眼不見為靜
但是缺點在於在 ViewState 過程中他就不會再出現了
破壞容易, 但是需要再把他救回來, 原先的 Attribute/ Checked 等選項還要補上去
2. CSS 策略
在 CSS 中加入
.hidden
{ display:none; }
程式中加入 Attribute
radioOption.Items.FindByValue("APPROVE").Attributes.Add("class", "hidden");
之後程式需要在顯示
radioOption.Items.FindByValue("APPROVE").Attributes.Remove("class");
我比較喜歡用後面這招
雖然空間多浪費一點
但是程式控制能力比較好..
2010年11月10日 星期三
RadWindow Open Short Script
--- Caller
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server"><script type="text/javascript">
function rowEdit() {
var radGridTable = $find("<%=RadGrid2.ClientID%>");
if ( (radGridTable.get_masterTableView().get_dataItems().length) ==0 )
{
alert("請選擇資料項目..");
return false;
}
selectedItems = radGridTable.get_masterTableView().get_selectedItems();
if (selectedItems.length > 0) {
// find Window Manager
var manager = $find("<%=RadWindowManager1.ClientID%>");
// find Window
var window = manager.getWindowByName("RadWindow1");
// find Grid Master Table
var masterTable = $find("<%=RadGrid2.ClientID%>").get_masterTableView();
// get the selected item
var selectedItem = masterTable.get_selectedItems()[0];
// extract the PK value
var pk = masterTable.getCellByColumnUniqueName(selectedItem, "seq_no").innerHTML;
// open the link
window.setUrl("EquipForm.aspx?action=APPROVE&pk=" + pk);
window.show();
// avoid postback
return false;
}
else {
alert("請選擇資料項目..");
return false;
}
}
function rowEditSaved() {
var radGridTable = $find("<%=RadGrid3.ClientID%>");
if ((radGridTable.get_masterTableView().get_dataItems().length) == 0) {
alert("請選擇資料項目..");
return false;
}
selectedItems = radGridTable.get_masterTableView().get_selectedItems();
if (selectedItems.length > 0) {
// find Window Manager
var manager = $find("<%=RadWindowManager1.ClientID%>");
// find Window
var window = manager.getWindowByName("RadWindow2");
// find Grid Master Table
var masterTable = $find("<%=RadGrid3.ClientID%>").get_masterTableView();
// get the selected item
var selectedItem = masterTable.get_selectedItems()[0];
// extract the PK value
var pk = masterTable.getCellByColumnUniqueName(selectedItem, "seq_no").innerHTML;
// open the link
window.setUrl("EquipForm.aspx?action=SAVE&pk=" + pk);
window.show();
// avoid postback
return false;
}
else {
alert("請選擇資料項目..");
return false;
}
return false;
}
function masterClientClose(sender, eventArgs) {
var masterTable = $find("<%= RadGrid1.ClientID %>").get_masterTableView();
masterTable.rebind();
masterTable = $find("<%= RadGrid2.ClientID %>").get_masterTableView();
masterTable.rebind();
}
function savedMasterClientClose(sender, eventArgs) {
var masterTable = $find("<%= RadGrid3.ClientID %>").get_masterTableView();
masterTable.rebind();
}
function masterClientShow(sender, eventArgs)
{
var masterTable = $find("<%= RadGrid2.ClientID %>").get_masterTableView();
sender.argument = masterTable;
}
function masterSavedClientShow(sender, eventArgs) {
var masterTable = $find("<%= RadGrid3.ClientID %>").get_masterTableView();
sender.argument = masterTable;
}
function rowDBClick(sender, args) {
rowEdit();
}
function rowDBClickSaved(sender, args) {
return rowEditSaved();
}
</script></telerik:RadCodeBlock>
<telerik:RadWindowManager ID="RadWindowManager1" runat="server" Skin="Outlook">
<Windows>
<telerik:RadWindow runat="server" Behavior="Default" ID="RadWindow1" Width="840px" Height="600px"
InitialBehavior="None" Left="" Modal="True" NavigateUrl="" OnClientShow="masterClientShow" OnClientClose="masterClientClose"
Top="" VisibleStatusbar="false" ReloadOnShow="True" ShowContentDuringLoad="False"></telerik:RadWindow>
<telerik:RadWindow runat="server" Behavior="Default" ID="RadWindow2" Width="840px" Height="600px"
InitialBehavior="None" Left="" Modal="True" NavigateUrl="" OnClientShow="masterSavedClientShow" OnClientClose="savedMasterClientClose"
Top="" VisibleStatusbar="false" ReloadOnShow="True" ShowContentDuringLoad="False"></telerik:RadWindow>
</Windows>
</telerik:RadWindowManager>
-- Callee
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
<script type="text/javascript">
function GetRadWindow() {
var oWindow = null;
if (window.radWindow)
oWindow = window.RadWindow; //Will work in Moz in all cases, including clasic dialog
else if (window.frameElement.radWindow)
oWindow = window.frameElement.radWindow;//IE (and Moz as well)
return oWindow;
}
function CloseAndExitPopWindow(message) {
GetRadWindow().Close();
if (message.length != 0)
alert(message);
var masterTable = GetRadWindow().argument;
masterTable.rebind();
}
function RefreshParentPage()
{
var masterTable = GetRadWindow().argument;
masterTable.rebind();
}
</script>
</telerik:RadCodeBlock>
<telerik:RadWindowManager ID="RadWindowManager1" runat="server" Skin="Outlook" >
<Windows>
<telerik:RadWindow runat="server" Behavior="Default" ID="RadWindow1" Width="740px" Height="540px"
InitialBehavior="None" Left="" Modal="True" NavigateUrl=""
Top="" VisibleStatusbar="false" ReloadOnShow="True" ShowContentDuringLoad="False"></telerik:RadWindow>
</Windows>
</telerik:RadWindowManager>
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server"><script type="text/javascript">
function rowEdit() {
var radGridTable = $find("<%=RadGrid2.ClientID%>");
if ( (radGridTable.get_masterTableView().get_dataItems().length) ==0 )
{
alert("請選擇資料項目..");
return false;
}
selectedItems = radGridTable.get_masterTableView().get_selectedItems();
if (selectedItems.length > 0) {
// find Window Manager
var manager = $find("<%=RadWindowManager1.ClientID%>");
// find Window
var window = manager.getWindowByName("RadWindow1");
// find Grid Master Table
var masterTable = $find("<%=RadGrid2.ClientID%>").get_masterTableView();
// get the selected item
var selectedItem = masterTable.get_selectedItems()[0];
// extract the PK value
var pk = masterTable.getCellByColumnUniqueName(selectedItem, "seq_no").innerHTML;
// open the link
window.setUrl("EquipForm.aspx?action=APPROVE&pk=" + pk);
window.show();
// avoid postback
return false;
}
else {
alert("請選擇資料項目..");
return false;
}
}
function rowEditSaved() {
var radGridTable = $find("<%=RadGrid3.ClientID%>");
if ((radGridTable.get_masterTableView().get_dataItems().length) == 0) {
alert("請選擇資料項目..");
return false;
}
selectedItems = radGridTable.get_masterTableView().get_selectedItems();
if (selectedItems.length > 0) {
// find Window Manager
var manager = $find("<%=RadWindowManager1.ClientID%>");
// find Window
var window = manager.getWindowByName("RadWindow2");
// find Grid Master Table
var masterTable = $find("<%=RadGrid3.ClientID%>").get_masterTableView();
// get the selected item
var selectedItem = masterTable.get_selectedItems()[0];
// extract the PK value
var pk = masterTable.getCellByColumnUniqueName(selectedItem, "seq_no").innerHTML;
// open the link
window.setUrl("EquipForm.aspx?action=SAVE&pk=" + pk);
window.show();
// avoid postback
return false;
}
else {
alert("請選擇資料項目..");
return false;
}
return false;
}
function masterClientClose(sender, eventArgs) {
var masterTable = $find("<%= RadGrid1.ClientID %>").get_masterTableView();
masterTable.rebind();
masterTable = $find("<%= RadGrid2.ClientID %>").get_masterTableView();
masterTable.rebind();
}
function savedMasterClientClose(sender, eventArgs) {
var masterTable = $find("<%= RadGrid3.ClientID %>").get_masterTableView();
masterTable.rebind();
}
function masterClientShow(sender, eventArgs)
{
var masterTable = $find("<%= RadGrid2.ClientID %>").get_masterTableView();
sender.argument = masterTable;
}
function masterSavedClientShow(sender, eventArgs) {
var masterTable = $find("<%= RadGrid3.ClientID %>").get_masterTableView();
sender.argument = masterTable;
}
function rowDBClick(sender, args) {
rowEdit();
}
function rowDBClickSaved(sender, args) {
return rowEditSaved();
}
</script></telerik:RadCodeBlock>
<telerik:RadWindowManager ID="RadWindowManager1" runat="server" Skin="Outlook">
<Windows>
<telerik:RadWindow runat="server" Behavior="Default" ID="RadWindow1" Width="840px" Height="600px"
InitialBehavior="None" Left="" Modal="True" NavigateUrl="" OnClientShow="masterClientShow" OnClientClose="masterClientClose"
Top="" VisibleStatusbar="false" ReloadOnShow="True" ShowContentDuringLoad="False"></telerik:RadWindow>
<telerik:RadWindow runat="server" Behavior="Default" ID="RadWindow2" Width="840px" Height="600px"
InitialBehavior="None" Left="" Modal="True" NavigateUrl="" OnClientShow="masterSavedClientShow" OnClientClose="savedMasterClientClose"
Top="" VisibleStatusbar="false" ReloadOnShow="True" ShowContentDuringLoad="False"></telerik:RadWindow>
</Windows>
</telerik:RadWindowManager>
-- Callee
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
<script type="text/javascript">
function GetRadWindow() {
var oWindow = null;
if (window.radWindow)
oWindow = window.RadWindow; //Will work in Moz in all cases, including clasic dialog
else if (window.frameElement.radWindow)
oWindow = window.frameElement.radWindow;//IE (and Moz as well)
return oWindow;
}
function CloseAndExitPopWindow(message) {
GetRadWindow().Close();
if (message.length != 0)
alert(message);
var masterTable = GetRadWindow().argument;
masterTable.rebind();
}
function RefreshParentPage()
{
var masterTable = GetRadWindow().argument;
masterTable.rebind();
}
</script>
</telerik:RadCodeBlock>
<telerik:RadWindowManager ID="RadWindowManager1" runat="server" Skin="Outlook" >
<Windows>
<telerik:RadWindow runat="server" Behavior="Default" ID="RadWindow1" Width="740px" Height="540px"
InitialBehavior="None" Left="" Modal="True" NavigateUrl=""
Top="" VisibleStatusbar="false" ReloadOnShow="True" ShowContentDuringLoad="False"></telerik:RadWindow>
</Windows>
</telerik:RadWindowManager>
訂閱:
文章 (Atom)