2010年11月25日 星期四

FindBugs in Java

建議可以安裝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月18日 星期四

Microsoft Office 不是正版

怪怪,明明就是正版,
不知道序號是被那個好事之人拿去用..

每一啟動 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 過去)


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
  
     

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} &amp;nbsp;頁數 &lt;strong&gt;{0}&lt;/strong&gt; / &lt;strong&gt;{1}&lt;/strong&gt;, &lt;strong&gt; 共 {5} 筆記錄&lt;/strong&gt;."  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");

我比較喜歡用後面這招
雖然空間多浪費一點
但是程式控制能力比較好..
  

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>
       

2010年11月6日 星期六

Stop ImageButton Postback

JS 中配上這個"終結令"

function foo(event)
{
   // 第一行就堵起來
   if (window.event)
       window.event.returnValue = false;   // IE, Chrome
   else
       event.preventDefault();   // FF
   ...
 
}

在 aps.net

<asp:ImageButton runat="server" id="image" OnClientClick="foo(event)">
包准 Button, ImageButton 不會往後端送 Postback
煞車煞的住!

Web Free Button Makers

找到兩家還不錯的 Button Makers 的 Site
最重要是能支援中文 (Unicode)

首推 http://cooltext.com/Logo-Design?LogoID=22&Font=11096
支援中文外,還支援超過 30 幾種中文字體,超強!

其次 http://dabuttonfactory.com/
一般,中文字體只有一種,但是 Button 選項還不少

對了,補充一下
黃金的 RGB 是 211,168, 9 (百度說的)

2010年11月5日 星期五

RadAjaxManager 對 ASP:RadioButtonList 失效的解決方案

手上 Telerik 開發的版本是 2009.03 版本
(應該需要更新了吧! 有機會試看看新版本及 VS 2010是否解決了這個問題)

我需要利用 RadioButtonList 透過 Ajax 驅動 其他元件
但結果是
只有一次能被驅動
之後就不能再啟動對應的呼叫
試了幾次,受不了了

Google 之後
發現官方網站就有人也問這個問題
Telerik 說這是 MS AJAX 的問題
不過我還是需要解決方案, 理由太多是無濟於事滴 ~~

還好,有一篇討論到節決方案
http://www.telerik.com/community/forums/aspnet-ajax/ajax/the-radajaxmanager-do-not-fire-postback-with-radiobuttonlist.aspx

竟然是將 RadioButtonList 自己也加進去驅動對象, 真是個怪解..