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>