amp@java

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            99 隨筆 :: 0 文章 :: 228 評論 :: 0 Trackbacks

          #

          from http://forum.java.sun.com/thread.jspa?threadID=628910&messageID=3618808
          hello,

          first time i want to excuse my english language ( i love spanish :P );

          i pass a whole morning to found the solution: How to go to page 1 in a DataScroller ( tomahawk component ) when we execute a filter ??

          we need to binding the component instance in the backing bean ( manage bean )

          JSP PAGE :
          <t:dataScroller .... .... binding="MB.scroll" />

          MANAGE BEAN:
          private HTMLDataScroller scroll = null;

          ....
          ....
          getScroll....
          setScroll...

          ok, now we have the same instance of an object in "front" and "back".
          in my case, when a execute a filter i call the method executeFilter()

          public void executeFilter(){
          ...
          ...
          // this is the function for returning to page 1 in a dataScroller
          scroll.getUIDate.setFirst(0)
          ...
          ...
          }

          I Hope that can help every JSF crazy programmer :P

          bye...
          posted @ 2006-06-14 09:37 amp@java 閱讀(2313) | 評論 (0)編輯 收藏

          在網頁中使用樹是一件很費資源的事情,但由于它使用起來很直觀,所以在很多應用中還是要使用到樹。建立樹有三種方法:
          1、一開始就把整棵樹,包括最底層的葉子(即使沒有展開)都讀到客戶端。那樣點擊時的速度會很快,但建立這棵樹的時間會很長,甚至會把瀏覽器弄死,而且會造成很多不必要的流量;
          2、樹的當前狀態保存在服務器端,點擊一層更新整棵樹,但沒有展開的部分不顯示,這樣每點一次都要把整棵樹的當前狀態下載下來,速度比較慢,服務器的負擔也比較重,但不用把整棵樹的所有層次一次下載下來,對層次比較多的樹來說能節約很大的流量;
          3、開始時只下載頂層,點擊一層更新一層,把樹的狀態保存在客戶端。這種樹綜合了上述兩種方法的好處,既保證了速度,又節約了流量。xloadtree就是這種。

          xloadtree主頁:http://webfx.eae.net/dhtml/xloadtree/xloadtree.html

          用法:
          很簡單,只要記住樹的每一層都可以用xml文件來表示,只要在服務器端生成每層的xml文件即可,那些xml文件并不是一開始就生成的,而是在請求的時候再生成。由于xml文件十分簡單,只有一個元素<tree>,所以用servlet來生成也很方便。僅僅使用一個servlet就可以生成所有層次的xml文件,只要給它傳遞不同的參數即可。
          詳細的用法可以查看主頁上的文檔:http://webfx.eae.net/dhtml/xloadtree/usage.html
          還可以把文件下載下來之后查看里面的文檔和demo:http://webfx.eae.net/download/xloadtree111.zip

          相關網頁:
          xloadtree的大bug??????? http://blog.csdn.net/sino_reason/archive/2004/08/13/73648.aspx
          分析xloadtree, 用ajax實現的動態目錄樹?http://www.aygfsteel.com/nickey/archive/2005/11/13/19606.html

          posted @ 2006-06-07 10:30 amp@java 閱讀(5235) | 評論 (1)編輯 收藏

          以NOKIA8250為例。通過8250的紅外與PC連接之后,會產生一個虛擬串口,這個串口的序號可能在每臺電腦上都不一樣。利用這個串口,就可以對手機進行一系列操作,包括發送、接收短信。通過程序操作串口,就可以把這部手機做成短信平臺。
          在Windows中,打開超級終端,在手機未連接之前,查看連接可使用的串口列表,然后連接手機,再查看列表,多出來的那個串口就是與手機通信的串口。通過該串口連接手機,就可以用AT指令來操作它。
          輸入AT回車,出現OK,就說明這個串口是支持AT指令的,有可能是手機,也有可能是普通的MODEM。
          輸入AT+CGMI回車,出現手機廠商信息,例如NOKIA,就說明這是手機,下面就可以進行一系列的操作了。
          AT指令有幾個實用的規則:
          1.輸入AT指令然后加“?”,就能列出該指令的當前狀態,例如輸入AT+CSCS?,就能列出當前手機使用的字符集,例如:+CSCS: "PCCP437"。
          2.輸入AT指令然后加“=?”,就能列出該指令的可選值,也就是手機所能支持的所有值,例如輸入AT+CSCS=?,就能列出手機能支持的所有字符集,例如:+CSCS: ("GSM","HEX","IRA","PCCP437","PCDN","8859-1"),可以通過AT+CSCS="HEX"來設置手機的字符集為HEX。


          短信內容的格式有兩種,一種是text,一種是PDU,text格式比較簡單,但不能發送特殊的短信,例如免提短信,發送中文短信也會亂碼。PDU格式則可以發送各種形式(免提,閃爍)和字符集的短信,不過PDU不夠直觀,需要通過程序來編碼解碼,例如發送到8613000000000的短信“中文信息”的PDU編碼為:0011000D91683100000000F00008A70C4E2D65874FE1606F000D000A,其長度為27。在PDU格式下,短信內容還包含了目標號碼,而在text格式下,目標號碼和短信內容是分開的。銳方超級SMS控件是一個很好的PDU編解碼控件。

          與短信相關的AT指令:

          AT 指令 功 能
          AT+CMGC Send an SMS command(發出一條短消息命令)
          AT+CMGD Delete SMS message(刪除SIM卡內存的短消息)
          AT+CMGF Select SMS message formate(選擇短消息信息格式:0-PDU;1-文本)
          AT+CMGL List SMS message from preferred store(列出SIM卡中的短消息,在PDU模式下,該值為數字,在text模式下,該值為字符串。PDU/text:0/"REC UNREAD"-未讀,1/"REC READ"-已讀,2/"STO UNSENT"-待發,3/"STO SENT"-已發,4/"ALL"-全部的)
          AT+CMGR Read SMS message(讀短消息)
          AT+CMGS Send SMS message(發送短消息。在PDU格式下,該值設置為PDU長度,例如30;在Text格式下,該值設置為目標手機號碼字符串,例如"8613888888888"。注意,在PDU模式下,手機號碼需要加上86開頭,否則不能發送。)
          AT+CMGW Write SMS message to memory(向SIM內存中寫入待發的短消息)
          AT+CMSS Send SMS message from storage(從SIN|M內存中發送短消息)
          AT+CNMI New SMS message indications(設置是否顯示新收到的短信,一般設成2,1,0,0,0,手機收到新的短信后會給PC發一條消息,包含了該短信在內存中的索引號,通過該索引號就可以讀出該短信)
          AT+CPMS Preferred SMS message storage(選擇短消息內存)
          AT+CSCA SMS service center address(短消息中心地址)
          AT+CSCB Select cell broadcast messages(選擇蜂窩廣播消息)
          AT+CSMP Set SMS text mode parameters(設置短消息文本模式參數)
          AT+CSMS Select Message Service(選擇短消息服務)

          知道這些之后,就可以通過編程來操作手機。在java中,利用Java Communication包可以操作串口,但官方的包在3.0之后就支持Linux和Solaris平臺了,Windows平臺的只支持到2.0,98年出的,不過在XP下還能使用,google一下就可以下載到,例如:http://mdubuc.freeshell.org/Jolt/javacomm20-win32.zip。也可以用開源的Rxtx實現串口通信。
          如果不想直接操作AT指令,還可以使用開源的SMSLib包,該包封裝了與短信相關的所有AT指令,也實現了PDU編解碼功能,使用起來十分方便。
          posted @ 2006-05-19 09:28 amp@java 閱讀(3478) | 評論 (2)編輯 收藏

          當初看上JSF,是因為看中了幾個好處:
          1、獲取或顯示表單數據時用相同的EL即可,JSF之前的EL只能get不能set;
          2、MyFaces實現里面有很多很“炫”的組件,例如下拉菜單,樹型控件,日期選擇控件等等,使用極其方便。
          于是就在一個小項目中使用JSF開發,用著就發現其實這個東西也帶來了很多比以前更麻煩的地方,就拿很常見的數據庫操作——查詢、修改、插入、刪除來說明使用JSF來實現有什么麻煩:
          1、查詢。對于小數據量,用一個dataTable就什么都搞定了。可是大數據量分頁就比較麻煩了,因為dataTable的分頁是把所有數據都取出來然后再一頁頁顯示,而大數據量下一般是要看哪一頁就取哪一頁。網上有個通用的分頁存儲過程,只要把一系列參數(頁碼,排序依據,每頁大小等)傳給它,就能獲得某一頁的數據。如果直接通過URL來傳遞那些參數,服務器根據參數來調用存儲過程,是很方便的事情。可是JSF卻不通過URL來傳遞參數了,整個頁面處理的過程也比較復雜,沒有以前那樣直觀。有人改了一下dataModel的實現方式,使它每次只取一頁的數據,效果是達到了,但要跳到某一頁,卻只能點鏈接,不能通過輸入URL來到達了(也就是不能把某一頁添加到收藏夾里了)。
          這兩天做了一些試驗,在jsf里還是可以通過URL傳遞參數的,在Backing?Bean里可以通過ValueBinding的getValue取得URL參數,然后根據參數來從數據庫中取得相應的內容,生成某個對象的bean,再在頁面上顯示出來。不過這樣一來,似乎就跟servlet差不多了。
          如果可以通過配置來設定表單提交是get方式還是post方式就好了。可是目前一律只能post,這樣造成的后果除了不能收藏,不能刷新(會提示是否重新提交數據)之外,還會使瀏覽器的后退功能失效。

          2、修改。在datatable中把數據顯示出來后,可以每一行加一個commanButton,在它的action method中調用dataModel的getRowData()方法來得到該行的數據,把數據保存在一個request范圍的bean里面,再轉向到另一個頁面通過可編輯表單來顯示該bean的內容,在那里就可以修改、提交了。由于是使用了forward方式轉向,所以url顯示的頁面還是數據顯示的那個頁面,只要一刷新,就又回到數據顯示那一頁而不是修改那一頁了;如果不想修改,按一下瀏覽器的后退按鈕,雖然回到了數據顯示的那一頁,但上面的commandButton已經失效,例如點擊修改按鈕,沒有任何反應,必須把那一頁刷新一下再點才有效。
          為了解決這個問題,我采用了URL傳遞參數的方法。通過在URL中指定ID來說明要修改的是哪個對象,在修改頁面的backing?bean的構造函數中,讀取URL參數來獲得ID,然后通過查詢數據庫得到該對象的其他內容,再顯示在頁面上。這樣就可以刷新,可以后退。

          3、新增。新增跟修改可以用同一個頁面來顯示,只是commandButton對應不同的action method,例如“修改”按鈕對應的是update,“新增”按鈕對應的是create,在兩個method里分別使用數據庫的update語句和insert語句即可。新增的時候是沒有ID的,修改的時候則已經有了ID。

          4、刪除。在顯示數據的dataTable里,每行可以添加一個commandButton,在它的action method里,讀取該行數據,得到ID后執行SQL的DELETE語句即可,比較簡單。

          無論是做什么,都離不開三個東西:頁面,配置文件,Backing Bean。頁面是表現層的東西,負責把頁面上的東西與Backing Bean聯系起來。配置文件則指定在頁面上使用的Backing Bean的名字、類、使用范圍,還有導航規則(Navigation Rules)。Backing Bean就是程序的邏輯部分了。即使實現最簡單的功能,例如顯示某個變量的值,這三個東西都是必不可少的。
          修改頁面的時候,雖然不用重啟服務器,但必須在新的session里才能看出效果來,最簡單的辦法就是把瀏覽器關掉,打開一個新的,查看結果。修改了配置文件和backing bean 就必須重啟服務器了。所以調試JSF是很麻煩的。
          posted @ 2006-04-08 01:08 amp@java 閱讀(874) | 評論 (1)編輯 收藏

          否則會帶來很多莫名其妙的問題。
          如果在開發過程中發現有奇怪的問題,首先要檢查在頁面中引用的Backing Bean是否已經在配置文件中定義!
          posted @ 2006-04-08 00:43 amp@java 閱讀(953) | 評論 (2)編輯 收藏

          在SWT中,通常需要開多個線程來執行任務,因為主線程為UI線程,不能用太長的時間來執行某個任務,否則會造成失去響應的假象。
          SWT的線程通信有幾個要注意的地方:
          1、工作線程訪問UI線程。不能在非UI線程中直接訪問UI控件的值,要獲得或設置控件的值必須通過Display對象的asyncExec()或syncExec()函數,一般的使用方法是:

          //代碼A:
          ?
          Display?disp??
          = ??Display.getDefault();
          ?
          if ?(disp? != ? null ?)??{
          ???disp.asyncExec(
          ????
          new ??Runnable()??{
          ????
          public ?? void ??run()??{
          ???????
          // ?在這里設置或獲得控件的值?
          ?}?
          }?
          );?
          }?

          2、內部類與外部類的交流。內部類調用外部類局部變量時,該變量必須是final的,這樣在取得控件的值后返回給外部類處理時就比較麻煩。例如,在上面的代碼段中,有個匿名內部類實現了Runnable接口,在里面的run()函數里可以訪問到UI對象,但是,得到了對象的值怎么告訴外面的代碼呢?假如用普通的局部變量傳遞進去,由于是final的,是不能賦值的,所以需要有一個封裝類來把需要返回的變量封裝起來,這個封裝類是final的,但里面的成員變量是可變的,這樣就把內部類里得到的東西傳遞到了外部,不過似乎比較麻煩,不知道有沒有更好的辦法。
          //代碼B:

          class
          ?StringWrapper?{
          ???public?String?uiValue;
          }
          StringWrapper?sw?
          =?new?StringWrapper();?
          Display?disp??
          =??Display.getDefault();
          ?
          if?(disp?!=?null?)??{
          ???disp.asyncExec(
          ????
          new??Runnable()??{
          ????
          public??void??run()??{
          ????????sw.uiValue?
          =?text.getText();//假設text是一個文本框對象
          ???????
          //?在這里設置或獲得控件的值?
          ????}?
          ???}?
          ???);?
          }?
          //這里就可以對sw.uiValue的值進行訪問
          3、線程間的同步。在上面的代碼B中,通過asyncExec()函數來取得控件的值所需要的時間比較長,如果在后面馬上訪問那些值是得不到的,于是就需要有個同步的問題,即在控件值取得之前先不進行下一步操作。可以通過synchronized塊及wait(),notify()機制來實現同步。

          //代碼C:

          class?StringWrapper?{
          ???
          public?String?uiValue;
          }
          StringWrapper?sw?
          =?new?StringWrapper();?
          Display?disp??
          =??Display.getDefault();
          ?
          if?(disp?!=?null?)??{
          ???disp.asyncExec(
          ????
          new??Runnable()??{
          ????
          public??void??run()??{
          ????????
          synchronized(sw){
          ??????????sw.uiValue?
          =?text.getText();//假設text是一個文本框對象
          ????????????sw.notify();
          ?????????}
          ???????
          //?在這里設置或獲得控件的值
          ?
          ????}?
          ???}?
          ???);?
          }
          synchronized(sw){
          ??sw.wait();
          }?
          //這里就可以對sw.uiValue的值進行訪問

          但是這里會帶來一個問題,假如很快就能取得控件的值,但后面還有很長一段時間才會用到該值,如果把sw.wait()語句放在比較后的地方,就有可能造成死鎖,因為sw已經被notify之后才開始wait的,再沒有其他線程來notify它了,它就只能一直wait下去……。為了解決這個問題,可以(1)把sw.wait()緊跟在disp.asyncExec()后面;(2)給wait()設置一個timeout參數,到了一定的時間還沒有東西notify它,它就自己超時。但這兩種辦法似乎都比較牽強,沒有十足的保證,JDK文檔里面有個例子,是用while來判斷是否已經達到了要求,如果已經達到了就不再wait。
          //代碼D:

          class?StringWrapper?{
          ???
          public?String?uiValue;
          ???
          public?boolean?isValueSet;//是否已經取得了控件的值
          }
          StringWrapper?sw?
          =?new?StringWrapper();?
          sw.isValueSet?
          =?false;
          Display?disp??
          =??Display.getDefault();
          ?
          if?(disp?!=?null?)??{
          ???disp.asyncExec(
          ????
          new??Runnable()??{
          ????
          public??void??run()??{
          ????????
          synchronized(sw){
          ??????????sw.uiValue?
          =?text.getText();//假設text是一個文本框對象
          ????????????sw.isValueSet?=?true;
          ????????????sw.notify();
          ?????????}
          ???????//?在這里設置或獲得控件的值

          ?
          ????}?
          ???}?
          ???);?
          }
          synchronized(sw){
          ??
          while(!sw.isValueSet){
          ????
          try{
          ??????sw.wait();
          ????}
          catch?(InterruptedException?e){
          ????}
          ??}
          }?
          //這里就可以對sw.uiValue的值進行訪問


          posted @ 2006-03-27 17:29 amp@java 閱讀(1014) | 評論 (0)編輯 收藏

          本來想在手機上開發一個短信加密發送/接收程序的,看了幾天J2ME,發現限制很多,幾乎無法實現。
          短信發送是可以的,只要手機能提供WMA的API;但接收的話要注冊監聽端口,短信必須發到這個端口才能被程序監聽到,然而,在J2ME之外,似乎沒有短信端口這個概念,所以其他手機要往這個端口發短信都不知道如何操作。
          不同的手機對J2ME的支持相差太多了,一個簡單的發送程序,在NOKIA3230上可以運行,在QD上就不行,而且是莫名其妙地打開了一個空白窗口,什么選項都看不見,按什么鍵都沒反應,都不知出了什么問題。

          posted @ 2006-03-25 01:42 amp@java 閱讀(305) | 評論 (0)編輯 收藏

          使用
          sp_OACreate
          sp_OADestroy
          sp_OAGetProperty
          sp_OASetProperty
          sp_OAMethod

          等系統存儲過程。
          posted @ 2006-03-23 10:25 amp@java 閱讀(501) | 評論 (0)編輯 收藏

          使用OPENDATASOURCE函數,該函數的詳細使用方法可以在幫助中找到。

          例子:
          SELECT?*?FROM
          OPENDATASOURCE(
          ???
          'SQLOLEDB',
          ???
          'Data?Source=ServerName;User?ID=MyUID;Password=MyPass'
          ).Northwind.dbo.Categories
          posted @ 2006-03-23 10:20 amp@java 閱讀(440) | 評論 (0)編輯 收藏

          ??? 英文原文鏈接:http://today.java.net/pub/a/today/2006/02/09/file-uploads-with-ajax-and-jsf.html

          ??? Translated by amplifier

          ??? 基于瀏覽器的文件上傳,特別是那些通過調用HTML標簽<input type="file">來實現的文件上傳,總是有很大的缺陷。大家都知道,上傳一個大于10MB的文件會導致非常糟糕的用戶體驗。當用戶提交表單上傳文件后,瀏覽器在把文件上傳到服務器的過程中就會表現得像失去響應一樣。當這個過程在后臺進行中的時候,很多不耐煩的用戶就會以為服務器掛掉了,于是就嘗試重新提交表單,這樣一來就更糟糕了。

          ??? 為了使文件上傳的用戶界面更友好,很多網站采用顯示不確定的進度動畫(例如一個翻轉的圖標)來提示用戶已提交文件。雖然這種技術會讓用戶覺得好受一點,但它只提供了極少與文件上傳狀態相關的信息。另外一種嘗試是通過實現一個applet來把文件上傳到FTP服務器上,這種方法的缺點是它只對有java的瀏覽器可用。

          ?? 在本文,我們將會使用一種新的方法,通過實現一個使用AJAX技術的組件來達到目的,該組件不僅僅把文件上傳到服務器,還“實時”監控文件上傳的實際進度。該組件的四個狀態如圖1,2,3,4所示:

          Stage 1: Selecting the file upload
          圖1. 階段1:選擇要上傳的文件
          Stage 2: Uploading the file to the server
          圖2.階段2:上傳中

          Stage 3: Uploaded completed.
          圖3.階段3:上傳完畢

          File Upload Summary
          圖4.文件上傳概要

          (未完待續)
          ?

          posted @ 2006-03-19 21:05 amp@java 閱讀(461) | 評論 (0)編輯 收藏

          僅列出標題
          共10頁: First 上一頁 2 3 4 5 6 7 8 9 10 下一頁 
          主站蜘蛛池模板: 德阳市| 永靖县| 东丽区| 安阳县| 昭平县| 西乌珠穆沁旗| 营山县| 历史| 略阳县| 宣武区| 南汇区| 资兴市| 林甸县| 肥城市| 岑溪市| 昌宁县| 晴隆县| 贡嘎县| 临高县| 凤翔县| 关岭| 岗巴县| 潜江市| 开鲁县| 山丹县| 柘荣县| 游戏| 内黄县| 阿瓦提县| 湟源县| 罗源县| 拜城县| 东阿县| 修文县| 饶河县| 都昌县| 平武县| 荥经县| 琼结县| 丰台区| 乌兰县|