<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 21  文章 - 12  trackbacks - 0
    <2012年5月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(4)

    隨筆檔案

    文章檔案

    新聞檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    前面講到我在做2BizBox ERP開發(fā)的時候,遇到導(dǎo)入數(shù)據(jù)的需求,然后我用JXL對Excel進(jìn)行了一些操作。

    但我們不能讓用戶輸入“1,2”這種坐標(biāo)吧,如客戶編號坐標(biāo);用戶肯定喜歡用Excel的坐標(biāo),A1,B1等來表示。來個圖看看:


    所以就要求程序把A1,B1等轉(zhuǎn)換成JXL認(rèn)識的坐標(biāo)。

    第一步:校驗數(shù)據(jù),看是否符合Excel坐標(biāo)表示法,我用的是正則

    第二步:把字母轉(zhuǎn)化成數(shù)字

    代碼供參考

    publicstaticint[] splitExcelCell(String coordinate) {

          coordinate = coordinate.trim().toUpperCase();

          int[] colAndRow =newint[2];

         

          if (coordinate.matches("[A-Z]{1,2}[0-9]+")) {

            

             StringBuffer tmpS = new StringBuffer();

            

             for (int i = 0; i < coordinate.length(); i++) {

                char c =coordinate.charAt(i);

               

                if (c >= 48 && c <= 57) {

                    colAndRow[0] = Integer.parseInt(coordinate.substring(i));

                    break;

                }

               

                tmpS.append(c);

             }

            

             colAndRow[1] = splitExcelCol(tmpS.toString());

          }

         

          return colAndRow;

       }

      

     

       publicstaticint splitExcelCol(String coordinate) {

          coordinate = coordinate.trim().toUpperCase();

          int colNumber = 0;

         

          if (coordinate.matches("[A-Z]{1,2}")) {

             if (coordinate.length() == 1) {

                int k = coordinate.charAt(0) - 64;

                colNumber = k;

             }

             elseif (coordinate.length() == 2) {

                int i = coordinate.charAt(0) - 64;

                int j = coordinate.charAt(1) - 64;

               

                colNumber = i * 26 + j;

             }

          }

         

          return colNumber;

       }

    當(dāng)然程序也要做一些判斷,如果用戶輸入有誤的話,報一些錯誤提示。

    posted @ 2012-06-19 09:54 zhangchuanzheng 閱讀(208) | 評論 (0)編輯 收藏

     

    大家知道TWaver Java總的TList繼承自Swing的JList,所以我們可以很容易控制其選擇,例如單選、多選等。但是本文介紹如何控制按指定數(shù)量進(jìn)行選擇。

    人生就是一個不停選擇的過程。所以,我們必須要謹(jǐn)慎的控制好你的選擇,無論是TList的SelectionModel,還是人生之路。

    在實際項目中,我們經(jīng)常需要對list進(jìn)行不能超過限定數(shù)量的多重選擇控制。本文用到的技巧可能是本站最簡單的一次了:利用DataBox的SelectionModel,當(dāng)選擇總數(shù)超過限定,就將最早的選擇刪除。

    其中max我們可以指定。乳溝max=1則變成了單選。

    通過這個思路,本文寫了一個很簡單的例子:通過控制多選數(shù)量,制作一個簡單的點菜選擇。相信你的系統(tǒng)中也經(jīng)常會有類似的場景:通過list讓用戶選擇指定數(shù)量的數(shù)據(jù)。



     

    posted @ 2012-05-29 17:14 zhangchuanzheng 閱讀(174) | 評論 (0)編輯 收藏

    Java很早就推出了Java Web Start(簡稱JWS)技術(shù)。這一技術(shù)的初衷很好:希望將桌面程序和Web頁面之間搭起一個無縫的橋梁。雖然Applet技術(shù)已經(jīng)存在了十多年,但是它日趨老邁衰落,所以JWS也就應(yīng)運而生了。

    但是JWS并未順利實現(xiàn)它的初衷。從Java的幾次大改版都可以看到,JWS的bug多多,漏洞頻頻,Sun和Oracle不得不頻繁的進(jìn)行打補丁 修復(fù)。可以看看Java 5和6每次大小版本升級變化中,有多少是和Java Web Start有關(guān)的。難怪很多人都這樣感嘆:“哥再也不用Java Web Start部署應(yīng)用了!”其實也未必,隨著Java的不斷完善,我們只要了解更多的技巧,就可以有效的消除一些JWS潛在的問題,并順利的應(yīng)用在企業(yè)應(yīng)用 中。

    以2BizBox ERP項目為例,本文介紹如何在企業(yè)應(yīng)用中利用動態(tài)生成JNLP文件的技術(shù)來實現(xiàn)應(yīng)用的快速部署。

    大家知道,2BizBox ERP作為一個免費的高質(zhì)量ERP軟件,有成千上萬的用戶。就我們開發(fā)團(tuán)隊負(fù)責(zé)維護(hù)的服務(wù)器,就有近千臺。每臺服務(wù)器都是一家企業(yè),每家企業(yè)又有幾十上百 的客戶端。如果采用下載客戶端安裝程序進(jìn)行安裝的方式來維護(hù)諸多的客戶端,無疑是巨大的工作量,用戶和我們開發(fā)團(tuán)隊都不會輕松方便。為了解決這一問題,采 用JWS無疑是必然的選擇。

    為了讓客戶端自動啟動下載和安裝程序,我們在企業(yè)的2BizBox ERP服務(wù)器上部署以下JNLP文件內(nèi)容:

    上面的JNLP文件定義了2BizBox ERP客戶端啟動所需要的jar包以及下載位置、jre版本等。

    在實際應(yīng)用中,效果良好。但是由于JNLP和JWS本身的bug,在某些情況下,后臺jar程序更新升級后,用戶側(cè)啟動jnlp并不能獲得更新,需 要強(qiáng)行清空J(rèn)WS緩存才行,這肯定不是一般用戶懂得的。還有一種情況,就是由于ERP本身的jar包發(fā)生了變化(例如發(fā)生了增減),此時相當(dāng)于jnlp文 件的內(nèi)容發(fā)生了變化。這時候,要求用戶一側(cè)機(jī)器必須意識到j(luò)nlp的變化并先將jnlp進(jìn)行更新。在很多java版本中(例如jre6的早期版本——例如 jre6 update20之前),由于潛在的一些bug等原因,都不能順利的進(jìn)行更新,導(dǎo)致程序啟動失敗。

    如何解決這一情況呢?采用動態(tài)jnlp是一個有效的方法。

    動態(tài)jnlp的思路是:在服務(wù)器的后端,通過jsp或servlet來動態(tài)的生成一個jnlp文件,而不是放置一個靜態(tài)的固定不變的jnlp文件。這樣,jnlp文件內(nèi)容就可以通過后臺應(yīng)用的邏輯進(jìn)行動態(tài)生成創(chuàng)建:需要什么jar包、需要什么jre版本等等。

    以jsp為例。在這個jsp中,首先要注意的幾個技術(shù)點是:要設(shè)置本頁面不要被瀏覽器緩存,放置jnlp內(nèi)容變化無法及時被更新;其次要設(shè)置 mime類型讓瀏覽器認(rèn)為它是一個jnlp文件,以便下載執(zhí)行而不是直接在瀏覽器中顯示出來。通過設(shè)置response即可達(dá)到這些目的:

    其中,禁止瀏覽器和webstart緩存jnlp內(nèi)容,通過設(shè)置:response.setHeader(“Pragma”, “no-cache”);和response.setHeader(“Expires”, “0″);
    設(shè)置文件類型,并給定一個動態(tài)的文件名。這個通過這個進(jìn)行:response.setHeader(“Content-Disposition”, “filename=\”bb.jnlp\”;”);response.setContentType(“application/x-java-jnlp-file”);

    一個需要注意的問題是,在動態(tài)生成jnlp文件時,要注意jnlp文件中的href標(biāo)簽不要進(jìn)行設(shè)置。為什么呢?看一下jnlp的格式文檔是這樣說的:
    http://lopica.sourceforge.net/ref.html#jnlp



    The jnlp file's one and only root.

    Attributes
    spec=version , optional
    Specifies what versions of the jnlp spec a jnlp file works with. The default value is 1.0+. Thus, you can typically leave it out.
    version=version , optional
    Specifies the version of the application as well as the version of the jnlp file itself.
    codebase=url , optional
    Specifies the codebase for the application. Codebase is also used as base URL for all relative URLs in href attributes.
    href=url , optional
    Contains the location of the jnlp file as a URL. If you leave out the href attribute, Web Start will disable the update check on your JNLP file, and Web Start will not treat each new JNLP file as an application update - only updated jar files will. Leaving out href usually makes only sense if your jnlp file is created dynamically (that is, throug a cgi-script, for example) and if your jnlp file's arguments or properties change from request to request (user to user).
    Note, that Java Web Start needs href to list your app in the Web Start Application Manager.

    可見在動態(tài)生成jnlp時候就不要設(shè)置href了,這樣就可以保證每次瀏覽器會重新下載jnlp文件內(nèi)容,否則可能會被緩存,無法及時更新程序。

    另外一個技巧是:jnlp文件中的jar包,可以進(jìn)行動態(tài)檢查文件jar包并動態(tài)生成。這樣,如果以后程序的jar文件有增減,就不必修改jnlp文件了。方法也很簡單:檢查當(dāng)前web在服務(wù)器的絕對路徑,并list所有的jar文件,然后在jnlp生成時候輸出即可:

    然后在jar的部分這樣列出:

    最后,如果需要在jnlp中指定當(dāng)前服務(wù)器的ip地址或主機(jī)地址,也可以通過動態(tài)生成。例如jnlp文件中的codebase,就是如此。另 外,2BizBox ERP還需要在主函數(shù)中給出當(dāng)前服務(wù)器的ip地址。而對于上千家的2BizBox服務(wù)器,每個jnlp要手工維護(hù)ip地址,是不可想象的。這里通過動態(tài)生 成,就永遠(yuǎn)的解決了這個問題:

    然后在jnlp中:

    這樣,通過jsp動態(tài)生成jnlp的方案就完成了。它在2BizBox ERP中應(yīng)用良好,方便的讓上千家2BizBox ERP的云主機(jī)用戶快速得到程序更新,而簡化了程序的維護(hù)方式。

    posted @ 2012-05-23 10:31 zhangchuanzheng 閱讀(399) | 評論 (2)編輯 收藏
    主站蜘蛛池模板: 国产视频精品免费视频| 狠狠综合亚洲综合亚洲色| 可以免费观看的国产视频| 国产精品亚洲mnbav网站 | 午夜小视频免费观看| 亚洲校园春色另类激情| 噼里啪啦电影在线观看免费高清| 亚洲av永久无码嘿嘿嘿 | 日本最新免费不卡二区在线| 亚洲国产av玩弄放荡人妇| 暖暖日本免费在线视频 | 国产成人va亚洲电影| 亚洲AV蜜桃永久无码精品| 一级毛片a免费播放王色电影 | 国产高清免费视频| 亚洲av乱码一区二区三区香蕉| 99精品全国免费观看视频| 亚洲GV天堂无码男同在线观看| 国产又大又黑又粗免费视频| 免费精品久久久久久中文字幕 | 亚洲一级免费视频| 亚洲一区欧洲一区| 日本免费一区二区三区最新| 免费一级毛片在线播放放视频| 亚洲色欲一区二区三区在线观看| 久久久久久AV无码免费网站下载| 久久亚洲sm情趣捆绑调教 | 国产大片线上免费观看| 亚洲av无码av在线播放| 久久久精品国产亚洲成人满18免费网站| 久久高潮一级毛片免费| 亚洲av无码国产精品夜色午夜| 永久免费av无码不卡在线观看| 粉色视频成年免费人15次| 国产AV无码专区亚洲精品| 国产精品爱啪在线线免费观看| 成人嫩草影院免费观看| 中文字幕亚洲精品| 高清在线亚洲精品国产二区| 久久国产精品免费网站| 性色av极品无码专区亚洲|