隨筆-8  評論-19  文章-2  trackbacks-0
            2006年5月30日

          在WebWork 2.2.1中,在配置文件xwork.xml中新增加了了一個元素: default-action-ref,其實這個配置非常簡單,但是很多人不知道,所以簡單介紹一下.

          如果你在xwork.xml里面配置了default-action-ref,那么當xwork中沒有找到對應的action時,默認就會調用default-action-ref指定的action.

          官方的wiki文檔參考這里: http://wiki.opensymphony.com/display/WW/Action+configuration

          配置代碼如下:

           

          												<package name="myPackage" ....>
                      ...
                      <default-action-ref name="simpleViewResultAction">
                      <!--
                      An example of a default action that is just a simple class
                      that has 3 fields: successUrl, errorUrl, and inputUrl.  This action
                      parses the request url to set the result values.  In the normal case
                      it just renders velocity results of the same name as the requested url.
                      -->
                      <action name="simpleViewResultAction" class="SimpleViewResultAction">
                      <result type="velocity">${successUrl}</result>
                      
          <result name="error" type="velocity">${errorUrl}</result>
                      <result name="input" type="velocity">${inputUrl}</result>
                      
          </action>
          ... </package>

          但是要注意,一般一個package內配置一個,如果配置多個,就無法預測結果了.

          注意上面的配置,第一個result的name屬性被省略了,webwork會認為它是"SUCCESS".

          WebWork帶的例子里面就有default-action-ref的配置,可以參考.

          posted @ 2007-06-21 14:39 jie_java 閱讀(1234) | 評論 (0)編輯 收藏

          基本知識

          1.1 性能是什么

          在性能調優之前,我們首先來了解一下性能是什么?關于性能,我想每個學習過 Java 的人都能列出幾點,甚至可以夸夸其談。在《 Java TM Platform Performance 》一書中,定義了如下五個方面來作為評判性能的標準:

          1) ????? 運算的性能——哪一個算法的執行性能最好?

          2) ????? 內存的分配——程序運行時需要耗費多少內存?

          3) ????? 啟動的時間——程序啟動需要多長時間?這在 Web 項目中的影響不大,但要注意部分程序需要部署或運行在客戶端時的情形(比如 applet 程序)。

          4) ????? 程序的可伸縮性——在壓力負載的情況下,程序的性能如何?

          5) ????? 性能的感知——用戶在什么情況下會覺得程序的性能不好?

          以上五個方面,在具體的使用場景可以有選擇的去評判。至于這五方面的性能調優,在后續的章節中將會陸續的給以相應的性能調優策略。

          1.2 調優的規則

          我們只需要關心對我們程序有影響,可以察覺到的性能問題,而不是每一個類中的每一個方法我們都需要想方設法的提高性能。如果程序的性能沒有達到我們所期望的要求,我們才需要考慮如何優化性能。同樣的,晦澀的代碼雖然提高了程序的性能,但同時可能帶給我們的是維護的噩夢。我們需要折中的考慮以上兩種情況,使得程序的代碼是優美的,并且運行的足夠快,達到客戶所期望的性能要求。

          優化代碼甚至會導致不良的結果, Donald Knuth (一位比較牛比較有影響的人物,具體是誰,我也忘了,誰知道,可以告訴我一下,謝謝!)曾說過,“ Premature optimization is the root of all evil” 。在開始性能調優前,需要先指出不優化代碼的一些理由。

          1) ????? 如果優化的代碼已經正常工作,優化后可能會引入新的 bug

          2) ????? 優化代碼趨向于使代碼更難理解和維護;

          3) ????? 在一個平臺上優化的代碼,在另一個平臺上可能更糟;

          4) ????? 花費很多時間在代碼的優化上,提高了很少的性能,卻導致了晦澀的代碼。

          確實,在優化前,我們必須認真的考慮是否值得去優化。

          1.3 調優的步驟

          一般我們提高應用程序的性能劃分為以下幾個步驟:

          1) ????? 明確應用程序的性能指標,怎樣才符合期望的性能需求;

          2) ????? 在目標平臺進行測試;

          3) ????? 如果性能已經達到性能指標, Stop

          4) ????? 查找性能瓶頸;

          5) ????? 修改性能瓶頸;

          6) ????? 返回到第 2 步。

          JDK 調優

          2.1 選擇合適的 JDK 版本

          不同版本的 JDK ,甚至不同廠家的 JDK 可能都存在著很大的差異,對于性能優化的程度不同。一般來說,盡可能選擇最新發布的穩定的 JDK 版本。最新的穩定的 JDK 版本相對以前的 JDK 版本都會做一些 bug 的修改和性能的優化工作。

          2.2 垃圾收集 Java 堆的優化

          垃圾收集就是自動釋放不再被程序所使用的對象的過程。當一個對象不再被程序所引用時,它所引用的堆空間可以被回收,以便被后續的新對象所使用。垃圾收集器必須能夠斷定哪些對象是不再被引用的,并且能夠把它們所占據的堆空間釋放出來。如果對象不再被使用,但還有被程序所引用,這時是不能被垃圾收集器所回收的,此時就是所謂的“內存泄漏”。監控應用程序是否發生了內存泄漏,有一個非常優秀的監控工具推薦給大家—— Quest 公司的 JProbe 工具,使用它來觀察程序運行期的內存變化,并可產生內存快照,從而分析并定位內存泄漏的確切位置,可以精確定位到源碼內。這個工具的使用我在后續的章節中還會做具體介紹。

          Java 堆是指在程序運行時分配給對象生存的空間。通過 -mx/-Xmx -ms/-Xms 來設置起始堆的大小和最大堆的大小。根據自己 JDK 的版本和廠家決定使用 -mx -ms -Xmx -Xms Java 堆大小決定了垃圾回收的頻度和速度, Java 堆越大,垃圾回收的頻度越低,速度越慢。同理, Java 堆越小,垃圾回收的頻度越高,速度越快。要想設置比較理想的參數,還是需要了解一些基礎知識的。

          Java 堆的最大值不能太大,這樣會造成系統內存被頻繁的交換和分頁。所以最大內存必須低于物理內存減去其他應用程序和進程需要的內存。而且堆設置的太大,造成垃圾回收的時間過長,這樣將得不償失,極大的影響程序的性能。以下是一些經常使用的參數設置:

          1) ????? 設置 -Xms 等于 -XmX 的值;

          2) ????? 估計內存中存活對象所占的空間的大小,設置 -Xms 等于此值, -Xmx 四倍于此值;

          3) ????? 設置 -Xms 等于 -Xmx 1/2 大小;

          4) ????? 設置 -Xms 介于 -Xmx 1/10 1/4 之間;

          5) ????? 使用默認的設置。

          大家需要根據自己的運行程序的具體使用場景,來確定最適合自己的參數設置。

          除了 -Xms -Xmx 兩個最重要的參數外,還有很多可能會用到的參數,這些參數通常強烈的依賴于垃圾收集的算法,所以可能因為 JDK 的版本和廠家而有所不同。但這些參數一般在 Web 開發中用的比較少,我就不做詳細介紹了。在實際的應用中注意設置 -Xms -Xmx 使其盡可能的優化應用程序就行了。對于性能要求很高的程序,就需要自己再多研究研究 Java 虛擬機和垃圾收集算法的機制了。可以看看曹曉鋼翻譯的《深入 Java 虛擬機》一書。?


          ?
          posted @ 2007-03-19 10:12 jie_java 閱讀(358) | 評論 (0)編輯 收藏
          1、放棄
            有舍才有得!
            把握的反面就是放棄,選擇了一個機會,就等于放棄了其它所有的可能。當新的機會擺在面前的時候,敢于放棄已經獲得的一切,這不是功虧一簣,這不是半途而廢,這是為了謀求更大的發展空間;或者什么都不為,只因為喜歡這樣做,因為,年輕就是最大的機會。不斷嘗試新的挑戰,會讓人生更豐富!
            人,只有在三十歲之前才會有這個膽量,有這雄厚的資本,才能具備這個資格。
            2、失戀
            不是不在乎,是在乎不起。如果沉迷其中的悲傷,將錯失所有更美好的一切!
            三十歲前最怕失去的,不是已經擁有的東西,而是失去夢想。愛情如果只是一個過程,那么正是這個年齡應當經歷的,如果要承擔結果,三十歲以后,可能會更有能力,更有資格。
            其實,三十歲之前,我們要做的事情很多,稍縱即逝,過久地沉溺在已經干涸的愛河的河床中,與這個年齡應擁有的熱情活力的生命節奏不合。
            3、離婚
            不是不在乎,是重新找到真正的幸福一切還來得及。
            一位三十八歲的女友與老公結婚十五年,冷戰十三年,終于分手了。她說:"如果說后來不愿意離婚是為了孩子,那他第一次提出離婚我沒有同意,現在想來真不知道為什么。如果那個時候早分手,我的生活絕不會是今天這個樣子。現在再重新開始,總覺得一切都晚了。
            4、漂泊
            漂泊不是一種不幸,而是一種資格。趁著沒有家室拖累,趁著身體健康,此時不飄何時飄?相信已婚的人一定很認同這句話。也只有漂泊過的人,才懂得珍惜日后安定的幸福。
            當然,漂泊的不一定是身體,也許只是幻想和夢境。新世紀的時尚領袖是飄浮的一代,渴望漂泊的人唯一不飄的是那顆心。
            5、失業
            三十歲以前,就嘗到失業的滋味當然是一件不幸的事,但不一定是壞事,它同時可以讓你更懂人情事故,體會人情冷暖。
            三十歲之前,就過早地固定在一個職業上,終此一生也許才是最大的不幸。失業也許讓你想起埋藏很久而塵封的夢想,也許會喚醒連你自己都從未知道的潛能。也許你本來就沒什么夢想,這時候也會逼著你去做夢。
            6、時尚
            不要追趕時尚,因為過多花費與奢侈可能導致生活拮據或是信用破產。
            按說青年人應該是最時尚的,但是獨立思考和個性生活更重要。在這個物質社會,其實對時尚的追求早已經成為對金錢的追求。今天,時尚是物欲和世俗的同義語。
            7、格調
            這是屬于雅痞的東西,追求格調就是他們的專利。
            他們說,有格調要滿足四大要件:智能、素養、自信和金錢。格調就是把〝高尚〞理解成穿著、氣質、愛好的品位和室內裝潢。
            也就是大老粗只會表現談吐的庸俗,〝雅痞〞們已經有能力庸俗他們的心靈了。主流觀念倒不是非要另類,另類已經成為年輕人觀念的主流了,在今天,老土倒顯得另類。關鍵是當今社會是一個創造觀念的時代,而不是一個固守陳舊觀念的時代。
            8、評價
            我們最不應該做出的犧牲,就是因為別人的評價而改變自我!因為那些對你指手畫腳的人,其實四根手指頭正指著自己,惶惑的不知道他們遵從的規則是什么。
            千萬不要只遵從規矩做事,規矩還在創造之中,要根據自己的判斷做每一件事,雖然這樣會麻煩一點。
            9、幼稚
            不要怕人說我們幼稚,這正說明你還年輕,還充滿活力,正享受幸福的人生。〝成熟〞是個嚇人的詞兒,也是個害人的詞兒。成熟和幼稚是對一個人最大而無當、最不負責任、最沒用的概括。
            那些庸人,絕不會有人說他們幼稚。不信,到哪天你被生活壓得老氣橫秋,暮氣沉沉的時候,人們一定會說你成熟了,你就會知道〝成熟〞是個什么東西。
            10、不適應
            在一首搖滾?有這么一句:這個城市改變了我,這個城市不需要我。不要盲目地適應你生存的環境,因為很可能這環境自身已經不適應這個社會的發展了。
            11、失敗
            我的老師曾經跟我說,一個人起碼要在感情上失戀一次,在事業上失敗一次,在選擇上失誤一次,才能長大。不要說失敗是成功之母那樣的老話,失敗來得越早越好,要是三十歲,四十歲之后再經歷失敗,有些事,很可能就來不及了。
            12、錯誤
            不要怕跌倒!犯錯,是沒有經驗的年輕人的專利。
            13、淺薄
            如果每看一次《鐵達尼號》就流一次眼淚,每看一次豆豆先生就笑得直不起腰,就會有人笑你淺薄。其實那只能說明你的神經依舊非常敏銳,對哪怕非常微弱的刺激都會迅速做出適應的反應;等你的感覺遲鈍了,人們就會說你深沉了。
            14、明星
            不是不必在乎,是不能在乎。
            明星在商品社會是一種消費品,花了錢,聽了歌,看了電影,明星們的表現再好,不過是物超所值而己,也不值得崇拜呀?
            就像你在地攤上花五十塊錢買的仿冒皮包,別人都猜是正牌貨,物超所值了吧?你就崇拜上這個包包了嗎?
            15、代價
            不是不計代價,而是要明白做任何事都要付出代價。對我們這個年齡的人來說,這絕不是一句廢話。否則,要到三十歲的時候才會明白自己曾經付出了多少代價,卻不明白為什么付出,更不明白自己得到了多少,得到什么。
            16、孤獨
            不要怕一個人,這是為自由付出的代價。
            17、失意
            包括感情上的,事業上的,也許僅僅是今天花了冤枉錢沒買到喜歡的東西,朋友家高朋滿座自己卻插不上一句話。過分在乎失意的感受,不是拿命運的捉弄來捉弄自己,就是拿別人的錯誤來懲罰自己。
            18、缺陷
            也許你個子矮,也許你長得不好看,也許你的嗓音像唐老鴨……那么你的優勢就是:你不會被自己表面的淺薄的亮點所耽擱,少花一些時間,少走一些彎,直接發現你內在的優勢,直接挖掘自己深層的潛能。
            19、誤會
            如果出于惡意,那么解釋也沒有用;如果出于善意,就不需要解釋。專門說到〝誤會〞倒不是因為一個人在三十歲之前被人誤會的時候更多,而是這個年齡的人想不開的時候更多。
            20、謠言
            這是一種傳染病,沉默是最好的疫苗。除非你能找出傳染源,否則解釋恰恰會成為病毒傳播最理想的條件。
            21、瘋狂
            這是年輕人最好的心理調適,只能說明你精力旺盛,身心健康。說你〝瘋狂〞是某些生活壓抑、心力交瘁的中老年人惡意的評價,他們就像一部年久失修的機器,最需要調試,但只能微調,一次大修就會讓他們完全報廢。
            穩定三十歲之前就在乎穩定的生活,那只有兩種可能,要么就是中了彩票,要么就是未老先衰。
            22、壓力
            中年人能夠承受多大壓力檢驗的是他的韌性;年輕人能承受多大壓力,煥發的是他的潛能。
            23、出國
            對待出國的態度應該像對待愛情一樣,努力爭取成敗隨緣。
            24、薪水
            給有遠見的你,如果只是給人打工,薪水再高也高不到哪兒去。所以不要太計較你從工作中得到多少錢,而是在三十歲之前,機會遠比金錢重要,事業遠比金錢重要,將來遠比金錢重要。
            對大多數人來說,三十歲之前工作的首要目標絕不是掙錢,而是掙未來。
            25、存款
            不要在意有沒有存款,倒不一定是因為我們錢少,年輕人現在誰都知道錢是有生命的。
            到處都是信用貸,機會這么多,條件有都很好,可以拿錢去投資,拿錢去“充電”。錢只有在它流通的過程中才是錢,否則只是一疊世界上質量最好的廢紙。
            26、房子
            除非買房子是為了升值,或是你結婚,不然大可不必為了房子擠破頭的傷腦筋。
            有個男子,家在外地,大學畢業之后,家人就替他買了一間房子。他曾經有個去美國工作的機會,但是他覺得剛買了房子就離開上海說不過去,就放棄了。
            現在他工作穩定,但總覺得自己好象一事無成。唯一的成就就是結婚了,并且有了孩子,因為他覺得不該讓這房子永遠空著,所以房子變成了家。房子是都市生活的寓言,這個寓言不應該過早的和我們相關。
            27、年齡
            接近三十歲女孩子就開始隱瞞自己的年齡,其實大可不必。現在青年期都延遲到四十五歲了,快三十又算得了什么呢?
            28、在乎
            這是一種拿不起、放不下的心態,它的反面不是放棄,而是天馬行空,自由自在,永遠保持革命樂觀主義的精神
          posted @ 2006-12-07 16:58 jie_java 閱讀(515) | 評論 (1)編輯 收藏

          ????????????????????????????????????????????????????????????? 高手談做程序員的基本原則
          ????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 引用來源:金蝶中間件公司CTO袁紅崗

          ??????不知不覺做軟件已經做了十年,有成功的喜悅,也有失敗的痛苦,但總不敢稱自己是高手,因為和我心目中真正的高手們比起來,還差的太遠。世界上并沒有成為高手的捷徑,但一些基本原則是可以遵循的。

            1. 扎實的基礎。數據結構、離散數學、編譯原理,這些是所有計算機科學的基礎,如果不掌握他們,很難寫出高水平的程序。據我的觀察,學計算機專業的人比學其他專業的人更能寫出高質量的軟件。程序人人都會寫,但當你發現寫到一定程度很難再提高的時候,就應該想想是不是要回過頭來學學這些最基本的理論。不要一開始就去學OOP,即使你再精通OOP,遇到一些基本算法的時候可能也會束手無策。

            2. 豐富的想象力。不要拘泥于固定的思維方式,遇到問題的時候要多想幾種解決問題的方案,試試別人從沒想過的方法。豐富的想象力是建立在豐富的知識的基礎上,除計算機以外,多涉獵其他的學科,比如天文、物理、數學等等。另外,多看科幻電影也是一個很好的途徑。

            3. 最簡單的是最好的。這也許是所有科學都遵循的一條準則,如此復雜的質能互換原理在愛因斯坦眼里不過是一個簡單得不能再簡單的公式:E=mc2。簡單的方法更容易被人理解,更容易實現,也更容易維護。遇到問題時要優先考慮最簡單的方案,只有簡單方案不能滿足要求時再考慮復雜的方案。

            4. 不鉆牛角尖。當你遇到障礙的時候,不妨暫時遠離電腦,看看窗外的風景,聽聽輕音樂,和朋友聊聊天。當我遇到難題的時候會去玩游戲,而且是那種極暴力的打斗類游戲,當負責游戲的那部分大腦細胞極度亢奮的時候,負責編程的那部分大腦細胞就得到了充分的休息。當重新開始工作的時候,我會發現那些難題現在竟然可以迎刃而解。

            5. 對答案的渴求。人類自然科學的發展史就是一個渴求得到答案的過程,即使只能知道答案的一小部分也值得我們去付出。只要你堅定信念,一定要找到問題的答案,你才會付出精力去探索,即使最后沒有得到答案,在過程中你也會學到很多東西。

            6. 多與別人交流。三人行必有我師,也許在一次和別人不經意的談話中,就可以迸出靈感的火花。多上上網,看看別人對同一問題的看法,會給你很大的啟發。

            7. 良好的編程風格。注意養成良好的習慣,代碼的縮進編排,變量的命名規則要始終保持一致。大家都知道如何排除代碼中錯誤,卻往往忽視了對注釋的排錯。注釋是程序的一個重要組成部分,它可以使你的代碼更容易理解,而如果代碼已經清楚地表達了你的思想,就不必再加注釋了,如果注釋和代碼不一致,那就更加糟糕。

            8. 韌性和毅力。這也許是"高手"和一般程序員最大的區別。高手們并不是天才,他們是在無數個日日夜夜中磨練出來的。成功能給我們帶來無比的喜悅,但過程卻是無比的枯燥乏味。你不妨做個測試,找個10000以內的素數表,把它們全都抄下來,然后再檢查三遍,如果能夠不間斷地完成這一工作,你就可以滿足這一條。

            這些是我這幾年程序員生涯的一點體會,希望能夠給大家有所幫助。

          posted @ 2006-08-13 10:16 jie_java 閱讀(359) | 評論 (0)編輯 收藏
          [1]好好規劃自己的路,不要跟著感覺走!根據個人的理想決策安排,絕大部分人并不指望成為什么院士或教授,而是希望活得滋潤一些,爽一些。那么,就需要慎重安排自己的軌跡。從哪個行業入手,逐漸對該行業深入了解,不要頻繁跳槽,特別是不要為了一點工資而轉移陣地,從長遠看,這點錢根本不算什么,當你對一個行業有那么幾年的體會,以后錢根本不是問題。頻繁地動蕩不是上策,最后你對哪個行業都沒有摸透,永遠是新手!   

          [2]可以做技術,切不可沉湎于技術。千萬不可一門心思鉆研技術!給自己很大壓力,如果你的心思全部放在這上面,那么注定你將成為孔乙己一類的人物!適可而止為之,因為技術只不過是你今后前途的支柱之一,而且還不是最大的支柱,除非你只愿意到老還是個工程師!   

          [3]?不要去做技術高手,只去做綜合素質高手!在企業里混,我們時常瞧不起某人,說他“什么都不懂,憑啥拿那么多錢,憑啥升官!”這是普遍的典型的工程師的迂腐之言。8051很牛嗎?人家能上去必然有他的本事,而且是你沒有的本事。你想想,老板搞經營那么多年,難道見識不如你這個新兵?人家或許善于管理,善于領會老板意圖,善于部門協調等等。因此務必培養自己多方面的能力,包括管理,親和力,察言觀色能力,攻關能力等,要成為綜合素質的高手,則前途無量,否則只能躲在角落看示波器!技術以外的技能才是更重要的本事!!從古到今,美國*本,一律如此!   

          [4]多交社會三教九流的朋友!不要只和工程師交往,認為有共同語言,其實更重要的是和其他類人物交往,如果你希望有朝一*當老板或高層管理,那么你整*面對的就是這些人。了解他們的經歷,思維習慣,愛好,學習他們處理問題的模式,了解社會各個角落的現象和問題,這是以后發展的巨大的本錢,沒有這些以后就會笨手笨腳,跌跌撞撞,遇到重重困難,交不少學費,成功的概率大大降低!

           [5]知識涉獵不一定專,但一定要廣!多看看其他方面的書,金融,財會,進出口,稅務,法律等等,為以后做一些積累,以后的用處會更大!會少交許多學費!!   

          [6]?抓住時機向技術管理或市場銷售方面的轉變!要想有前途就不能一直搞開發,適當時候要轉變為管理或銷售,前途會更大,以前搞技術也沒有白搞,以后還用得著。搞管理可以培養自己的領導能力,搞銷售可以培養自己的市場概念和思維,同時為自己以后發展積累龐大的人脈!應該說這才是前途的真正支柱!!!   

          [7]?逐漸克服自己的心里弱點和性格缺陷!多疑,敏感,天真(貶義,并不可愛),猶豫不決,膽怯,多慮,臉皮太薄,心不夠黑,教條式思維。。。這些工程師普遍存在的性格弱點必須改變!很難嗎?只在床上想一想當然不可能,去幫朋友守一個月地攤,包準有效果,去實踐,而不要只想!不克服這些缺點,一切不可能,甚至連項目經理都當不好--盡管你可能技術不錯!   

          [8]工作的同時要為以后做準備!建立自己的工作環境!及早為自己配置一個工作環境,裝備電腦,示波器(可以買個二手的),仿真器,編程器等,業余可以接點活,一方面接觸市場,培養市場感覺,同時也積累資金,更重要的是準備自己的產品,咱搞技術的沒有錢,只有技術,技術的代表不是學歷和證書,而是產品,拿出象樣的產品,就可技術轉讓或與人合作搞企業!先把東西準備好,等待機會,否則,有了機會也抓不住!   

          [9]要學會善于推銷自己!不僅要能干,還要能說,能寫,善于利用一切機會推銷自己,樹立自己的品牌形象,很必要!要創造條件讓別人了解自己,不然老板怎么知道你能干?外面的投資人怎么相信你?提早把自己推銷出去,機會自然會來找你!搞個個人主頁是個好注意!!特別是培養自己在行業的名氣,有了名氣,高薪機會自不在話下,更重要的是有合作的機會...   

          [10]該出手時便出手!永遠不可能有100%把握!!!條件差不多就要大膽去干,去闖出自己的事業,不要猶豫,不要彷徨,干了不一定成功,但至少為下一次沖擊積累了經驗,不干永遠沒出息,而且要干成必然要經歷失敗。不經歷風雨,怎么見彩虹,沒有人能隨隨便便成功!
          posted @ 2006-07-18 15:29 jie_java 閱讀(414) | 評論 (0)編輯 收藏

          該例子主要實現了jstl 下拉菜單的功能,由于jstl中沒有else功能,下面同時體現了如何在jstl實現if? else的功能。
          <%
          java.util.List list = new java.util.ArrayList();
          list.add("");
          list.add("限時");
          list.add("特提");
          list.add("平急");
          request.setAttribute("list", list);

          //用數組也可以實現
          //String[] str = {"","限時","特提","特急"};
          //request.setAttribute("list",str);
          %>

          <select size="1" name="jjcd" value="" style="width: 91; height: 18">
          ? <c:forEach var="item" items="${list}">
          ??<c:choose>
          ??<c:when test="${item eq '特提'}">
          ??<option selected>特提</option>
          ??</c:when>
          ??<c:otherwise>
          ???<option><c:out value="${item}"/></option>
          ??</c:otherwise>
          ??</c:choose>
          ? </c:forEach>
          </select>

          另一種實現下拉菜單的方法:
          ?? <select name="jjcd">
          ??<c:forEach var="item" items="${list}">
          ???<option <c:if test="${item eq '特提'}">selected</c:if> value="<c:out value="${item}"/>">
          ???<c:out value="${item}"/></option>
          ??</c:forEach>
          ?? </select>

          posted @ 2006-06-30 13:28 jie_java 閱讀(5190) | 評論 (0)編輯 收藏

          ????? 由于視圖沒有主鍵,所以在用hibernate對視圖操作就需要做點處理了,網上搜了一通也沒能找到相關文章,后來突然想到了myeclipse可以幫助生成hibernate的配置文件和對應的pojo代碼。
          ????? 打開myeclipse,選擇相關的視圖,生成了配置文件和pojo類,發現pojo類生成了兩個,而配置文件卻一個,參看了配置文件和類,明白了是怎么回事。生成的配置文件通過了組合的方式生成,所以會對應兩個類,一個類主要存放id信息,以個類存放對應的字段信息。
          ????? 下面是生成的類和配置文件:
          類:
          public class AllTablePb implements Serializable {

          ?// Fields
          ?private AllTablePbId id;

          ?// Property accessors
          ?public AllTablePbId getId() {
          ? return this.id;
          ?}

          ?public void setId(AllTablePbId id) {
          ? this.id = id;
          ?}
          }

          public class AllTablePbId implements java.io.Serializable {

          ?// Fields

          ?private String owner;

          ?private String tableName;

          ?private String columnName;

          ?private String dataType;

          ?private String pbcCnam;

          ?private String pbcCmnt;

          ?// Property accessors

          ?public String getOwner() {
          ? return this.owner;
          ?}

          ?public void setOwner(String owner) {
          ? this.owner = owner;
          ?}

          ?public String getTableName() {
          ? return this.tableName;
          ?}

          ?public void setTableName(String tableName) {
          ? this.tableName = tableName;
          ?}

          ?public String getColumnName() {
          ? return this.columnName;
          ?}

          ?public void setColumnName(String columnName) {
          ? this.columnName = columnName;
          ?}

          ?public String getDataType() {
          ? return this.dataType;
          ?}

          ?public void setDataType(String dataType) {
          ? this.dataType = dataType;
          ?}

          ?public String getPbcCnam() {
          ? return this.pbcCnam;
          ?}

          ?public void setPbcCnam(String pbcCnam) {
          ? this.pbcCnam = pbcCnam;
          ?}

          ?public String getPbcCmnt() {
          ? return this.pbcCmnt;
          ?}

          ?public void setPbcCmnt(String pbcCmnt) {
          ? this.pbcCmnt = pbcCmnt;
          ?}

          }

          配置文件:
          <hibernate-mapping>
          ?<class name="com.hhkj.workflow.bean.AllTablePb" table="V_ALLTAB_PB" schema="CANP">
          ? <composite-id name="id" class="com.hhkj.workflow.bean.AllTablePbId">
          ?? <key-property name="owner" type="string">
          ??? <column name="OWNER" length="30" />
          ?? </key-property>
          ?? <key-property name="tableName" type="string">
          ??? <column name="TABLE_NAME" length="30" />
          ?? </key-property>
          ?? <key-property name="columnName" type="string">
          ??? <column name="COLUMN_NAME" length="30" />
          ?? </key-property>
          ?? <key-property name="dataType" type="string">
          ??? <column name="DATA_TYPE" length="106" />
          ?? </key-property>
          ?? <key-property name="pbcCnam" type="string">
          ??? <column name="PBC_CNAM" length="30" />
          ?? </key-property>
          ?? <key-property name="pbcCmnt" type="string">
          ??? <column name="PBC_CMNT" length="254" />
          ?? </key-property>
          ? </composite-id>
          ?</class>
          </hibernate-mapping>
          這樣就可以通過AllTablePb.getId()取得相關的信息。
          ????? 感覺myeclipse的確不錯,特別是對于使用hibernate還不是非常熟練的人來說,通過它可以幫解決不少問題。
          ????? 通過這樣對視圖的操作,同樣也可以用到對于那些沒有定義主鍵的表,操作方法是一樣的。
          ????? 呵呵,個人的一點體會,歡迎大家多提意見。

          posted @ 2006-06-01 16:21 jie_java 閱讀(10986) | 評論 (15)編輯 收藏
          Java中看到接口,第一個想到的可能就是C++中的多重繼承和Java中的另外一個關鍵字abstract。從另外一個角度實現多重繼承是接口的功能之一,接口的存在可以使Java 中的對象可以向上轉型為多個基類型,并且和抽象類一樣可以防止他人創建該類的對象,因為接口不允許創建對象。

          ?

          interface 關鍵字用來聲明一個接口,它可以產生一個完全抽象的類,并且不提供任何具體實現。 interface 的特性整理如下:

          1.??????? 接口中的方法可以有參數列表和返回類型,但不能有任何方法體。

          2.??????? 接口中可以包含字段,但是會被隱式的聲明為 static final

          3.??????? 接口中的字段只是被存儲在該接口的靜態存儲區域內,而不屬于該接口。

          4.??????? 接口中的方法可以被聲明為 public 或不聲明,但結果都會按照 public 類型處理。

          5.??????? 當實現一個接口時,需要將被定義的方法聲明為 public 類型的,否則為默認訪問類型, Java 編譯器不允許這種情況。

          6.??????? 如果沒有實現接口中所有方法,那么創建的仍然是一個接口。

          7.??????? 擴展一個接口來生成新的接口應使用關鍵字 extends ,實現一個接口使用 implements

          ?

          interface 在某些地方和 abstract 有相似的地方,但是采用哪種方式來聲明類主要參照以下兩點:

          1.??????? 如果要創建不帶任何方法定義和成員變量的基類,那么就應該選擇接口而不是抽象類。

          2.??????? 如果知道某個類應該是基類,那么第一個選擇的應該是讓它成為一個接口,只有在必須要有方法定義和成員變量的時候,才應該選擇抽象類。因為抽象類中允許存在一個或多個被具體實現的方法,只要方法沒有被全部實現該類就仍是抽象類。

          ?

          以上就是接口的基本特性和應用的領域,但是接口絕不僅僅如此,在 Java 語法結構中,接口可以被嵌套,既可以被某個類嵌套,也可以被接口嵌套。這在實際開發中可能應用的不多,但也是它的特性之一。需要注意的是,在實現某個接口時,并不需要實現嵌套在其內部的任何接口,而且, private 接口不能在定義它的類之外被實現。

          posted @ 2006-05-30 14:23 jie_java 閱讀(3549) | 評論 (3)編輯 收藏
          主站蜘蛛池模板: 金乡县| 浏阳市| 宁明县| 綦江县| 翼城县| 噶尔县| 黔西| 手游| 仙游县| 钦州市| 武平县| 全州县| 米易县| 龙泉市| 浑源县| 玛纳斯县| 洛川县| 白朗县| 休宁县| 包头市| 麻栗坡县| 醴陵市| 柯坪县| 巴彦淖尔市| 汾西县| 赤壁市| 花莲市| 牙克石市| 麟游县| 车致| 青阳县| 夹江县| 开江县| 杂多县| 玛多县| 堆龙德庆县| 志丹县| 荔波县| 县级市| 花垣县| 遵义县|