雅典之夏的小站
          知人者智 自知者明 Fighting!!
          我們終于進(jìn)入了這個(gè)社會(huì)。從此結(jié)束了被學(xué)校老師看管的生涯,結(jié)束了做父母乖寶
          貝的日子,也結(jié)束從父母兄長那里拿錢的幸福時(shí)光。

            我們從家里搬了出來,提著自己半新不舊的行囊找了間不能再廉價(jià)的破房子租了下

          來,開始了闖蕩的生活。

            我們的眼光充滿了好奇,我們的血液里流淌著激情,我們的錢夾卻空前的瘦小。
            在面對(duì)第一個(gè)老板第一批同事第一份工作的時(shí)候,我們是那樣的慷慨激昂,我們認(rèn)

          為自己無所不能,我們幻想很快就可以打造一片屬于自己的天地,我們對(duì)未來充滿了信

          心。并且希望從別人艷羨的目光中找到一點(diǎn)點(diǎn)驕傲的資本。

            可是漸漸的我們才知道,其實(shí)現(xiàn)實(shí)和自己的理想有著天壤之別。我們發(fā)現(xiàn)了老板是

          多么的陰險(xiǎn)狠毒同事是多么的勢利小氣工作是多么的枯燥無趣,我們也發(fā)現(xiàn)了房租水電

          氣費(fèi)把人愁死了。發(fā)薪的日子總好像遙不可及,商店里的東西仿佛只是為別人擺設(shè),我
          們還發(fā)現(xiàn)了只有周末跑到母校瞎逛才感覺釋然,只有和老同學(xué)一起聊天玩耍才真正開心
          只有在步行街上看美女才不無聊。

            漸漸的我們也學(xué)會(huì)了泡吧,酒吧迪吧水吧網(wǎng)吧玩具吧都是我們打發(fā)無聊時(shí)間的場
          所。可是我們還是泡不到妞,以前自以為是的那些愛情理論泡馬子技巧在金錢時(shí)代都是

          狗屁,都出奇的蒼白無力。于是我們感嘆世界變得太快,快得讓我們這些窮小子根本就

          無所適從。

            漸漸的我們也變得深沉起來,不再為一個(gè)很幼稚的笑話就哈哈大笑,不再動(dòng)不動(dòng)就

          亂發(fā)牢騷,也不再把內(nèi)心深處的秘密輕易地跟別人訴說。我們也說不清楚這到底是成
          還是消沉,對(duì)著鏡子看,卻發(fā)現(xiàn)里面那張臉陌生得可怕。

            漸漸的我們似乎大徹大悟了,什么都看透了,一切都虛無縹緲了,然后我們什么都

          很漠然,坐公交車也不讓座了,看到小偷偷東西也懶得理了,吃點(diǎn)小虧想想也就算了,

          但是我們卻在每天下班之前發(fā)愁晚餐該吃什么了,在大家一起喝茶的時(shí)候盤算著自己
          不要買單,在臨睡之前把這個(gè)月的開支算了又算。

            漸漸的我們感覺自己其實(shí)什么都不是,沒有錢沒有名沒有地位,身高也太矮了皮膚

          也太黑了長相也太難看了,什么都要看人家的臉色,走在哪里都似乎低人一等,有時(shí)真

          恨不得割脈上吊服毒跳樓自行了斷。

            漸漸的我們也不想看書了,也不想談理想了,也不想談前途了,也不想花太多精力

          胡思亂想。我們也不想聽音樂了,也不想看電影了,不過倒時(shí)常看些成人的碟子,交流

          些黃色的笑話。我們開始沉迷于酒液里,沉迷于方城中,沉迷于低級(jí)場所內(nèi)。家的概念

          越來越模糊了,親情的感覺越來越遙遠(yuǎn)了,除了在夢中偶爾回到家鄉(xiāng)之外,我們挺多可

          以借助一條冰冷的電話線和家人說說一些開始偏離生活的話,卻看不到老爹老媽又長出

          了多少根白頭發(fā)又多了幾道皺紋。

            看到有人在球場上酣戰(zhàn),我們似乎也想上去來兩腳,其實(shí)很久沒有運(yùn)動(dòng)的身體已經(jīng)

          無法支撐我們?cè)倥芏噙h(yuǎn)了,而且?guī)缀趸膹U的球技讓我們懷疑自己那些踢球的年歲是不是

          上輩子的事。

            望著滿街穿著前衛(wèi)的少男少女,我們開始表現(xiàn)出厭惡的表情,卻忘了自己前些年其

          實(shí)有過之而無不及。遇到在大庭廣眾之下舉止親熱的學(xué)生情侶,我們的目光也變成了不

          屑,并惡狠狠地罵他們傷風(fēng)敗俗。

            經(jīng)過彩票銷售點(diǎn)的時(shí)候,我們?nèi)滩蛔∫蔡统鲆稽c(diǎn)本該買書的錢來買幾注,然后天

          做夢中了五百萬之后多少萬買房子多少萬買車多少萬胡亂揮霍,可是每一次開獎(jiǎng)雖然屢

          屢有人中頭獎(jiǎng)卻始終與自己無緣,于是在短暫的失望之后,我們依然鍥而不舍地做著美

          夢。

            漸漸的我們的人生觀、價(jià)值觀、愛情觀也有所改變。我們已經(jīng)不認(rèn)為為了往上爬而

          不擇手段有什么不妥,我們對(duì)努力就有回報(bào)的說法嗤之以鼻,我們嘲笑所謂的貞節(jié)
          觀,
          所謂的責(zé)任感,希望甚至去找尋一夜情。

            我們開始關(guān)注街上跑的車是寶馬還是奧拓,關(guān)注哪個(gè)酒廊的吧臺(tái)小姐酒量如何,關(guān)

          注哪款手機(jī)用起來更加叉人眼,關(guān)注哪個(gè)牌子的西服穿起來更有派頭。但也就只是關(guān)注

          而已,因?yàn)槲覀兦宄o論是寶馬還是奧拓,我們都買不起,吧臺(tái)小姐酒量再不行,我

          也不能把人家怎么樣,至于手機(jī)和西服,還是用自己買了很久的老款式。

            不知從什么時(shí)候開始,我們?yōu)樽约旱脑庥龈械綉崙嵅黄搅耍覀冊(cè)絹碓娇床粦T老板

          猙獰的面目,越來越無法忍受同事的卑鄙齷齪,越來越不堪就這樣生活下去。于是我
          在感嘆運(yùn)氣不好的同時(shí)迫切地想改變自己的命運(yùn),我們左顧右盼,尋找機(jī)會(huì),卻始終看

          不到出路。

            終于有一天,我們像火山爆發(fā)一樣,一沖動(dòng)之下把老板炒了。收拾東西昂然地走

          辦公室的那一刻我們有英雄離去那種豪邁與無悔,只從同事愕然與嘲諷夾雜的眼神中
          隱看到一絲無奈,卻不知道等待自己的,將是無盡的痛苦與折磨。

            我們很快發(fā)現(xiàn)了雖然自己擁有并不低的學(xué)歷和一定的工作經(jīng)驗(yàn),并像跑場子一樣

          這家公司跑到那家公司,一次接一次地應(yīng)聘,可是根本就無法找到適合的工作。

            時(shí)間一天一天過去,工作依然遙遠(yuǎn)得不知子丑寅卯,錢包越來越癟了,交房租的日

          子也越來越近了,我們心如火焚,有著世界末日即將來臨的惶恐。我們也開始有點(diǎn)后悔

          自己太輕率就辭職了,也開始萌生鋌而走險(xiǎn)的念頭,但又不敢真的去搶銀行綁架什么
          的,心情低沉到了極點(diǎn),我們的脾氣也大了,唉嘆聲也響了。

            所幸這樣的日子終于結(jié)束了。我們又到了新的工作單位。這時(shí)候我們雖然或多或少

          有點(diǎn)激動(dòng),但更多的是謹(jǐn)慎與慘淡。我們不會(huì)再對(duì)老板抱什么幻想,不會(huì)認(rèn)為他會(huì)給我

          們多好的待遇,我們也不會(huì)和同事談什么知心話,因?yàn)槲覀円呀?jīng)知道,不可能與有利益

          沖突的人成為朋友,當(dāng)然我們也不再愚蠢地把這個(gè)工作當(dāng)事業(yè)一樣拼命,只把這里當(dāng)

          自己的一個(gè)跳板,一旦有機(jī)會(huì)就立馬走人。

            接下來的生活無趣又無味,但我們漸漸的也就無所謂了。我們也不想泡吧了,不想

          什么活著的意義了,老同學(xué)在一起也開始有點(diǎn)話不投機(jī)了,以前很少聯(lián)系的朋友,現(xiàn)在

          更不想去聯(lián)系了,就算有時(shí)候接到他們打來的電話,也只是隨便吭吭唷唷的應(yīng)付幾
          句。
          雖然酒還是經(jīng)常喝,但很多時(shí)候都一個(gè)人獨(dú)飲獨(dú)醉了。這時(shí)候我們的寂寞更是深入骨
          髓,我們的苦痛更加真切而細(xì)膩。我們空前地懷念在學(xué)校的那些歲月,我們會(huì)捧著畢業(yè)

          合照發(fā)半天呆,我們卻不想再到母校去閑逛了,如果是偶然經(jīng)過,看到曾經(jīng)熟悉無比的

          景物,心里還真的翻涌起一股酸
            楚,但是我們不會(huì)流眼淚。畢業(yè)時(shí)曾經(jīng)很賤的男兒淚如今又變得珍貴起來。

            當(dāng)然我們也還是經(jīng)常上網(wǎng),不過很多時(shí)候都是為了打發(fā)時(shí)間。我們很可能迷上了傳

          奇之類的游戲,卻很少再光顧同學(xué)錄網(wǎng)頁,更不想在上面留言了。

            我們無師自通的學(xué)會(huì)了自欺欺人,雖然我們?cè)谝股顗艋貢r(shí)也會(huì)憎恨自己的虛偽與

          為,更討厭這種豬狗不如的生活方式,但是我們就象被囚禁的鳥,根本就無能為力。有

          時(shí)候我們會(huì)自嘲似的給找很多借口來解釋自己的某種行為,盡管我們也知道這樣做其
          實(shí)
          毫無意思,也毫無必要。

            我們開始不斷地聽到老同學(xué)們結(jié)婚的消息、升職的消息。然后我們不經(jīng)意地就想到

          某某在學(xué)校時(shí)的樣子,然后我們不由得感嘆時(shí)間流逝之無情,然后我們就想在塵封已

          的日記本上寫點(diǎn)什么,然后我們不知不覺地眼角竟然也有點(diǎn)濕潤了。

          我們夜里躺在床上睜大眼睛,卻無法在漆黑中排遣郁悶




          我們夜里躺在床上睜大眼睛,卻無法在漆黑中排遣郁悶時(shí),就會(huì)格外的想有個(gè)人陪在身

          邊。很多往事會(huì)像潮水一樣向我們撲來。我們?cè)?jīng)暗戀過的人、曾經(jīng)追求過但失敗了的
          人、
          曾經(jīng)相愛過的人,都一一地閃過腦海,于是,心里會(huì)有種傷感,很純粹的傷感。因?yàn)槲?BR>們知
          道,愛情其實(shí)真的已經(jīng)與我們離得很遠(yuǎn)。

          我們?cè)囍ㄟ^各種途徑來結(jié)交朋友,但是每每交往了幾次,我們就不想再與他們來往。

          說不清楚是因?yàn)樗麄兲^于現(xiàn)實(shí)還是我們太封閉。我們于是感慨萬千,在這個(gè)很多人都
          戴面
          具生活的社會(huì),原來交一個(gè)真正的朋友竟然那么難。我們也試著去約會(huì),可是愛情并非
          喝水
          吃飯那么簡單,到最后都還是以失敗告終。高不成低不就的我們繼續(xù)高舉單身的旗幟游
          走于
          大街小巷。

          我們非常懷念學(xué)生時(shí)代那種單純的戀情,非常羨慕那些還能坐在教室中的年輕人,非常

          希望自己可以再讀一次大學(xué),但是我們也知道,潑出去的水怎么能夠收回,遠(yuǎn)逝的時(shí)光
          如何
          可能重來?

          我們的酒量越來越大,一打啤酒喝下去一只手指在眼前豎著也無法看成兩只手指。我們

          的腰越來越粗背越來越寬肚皮越來越大,日漸增多的脂肪很是晃眼。我們爬上樓梯的動(dòng)
          作越
          來越笨拙,也越來越吃力,才到三樓就已經(jīng)氣喘吁吁。


          我們向往著能到外面去走一走,看一看,卻又害怕淪落天涯,苦不堪言。我們?cè)絹碓接X

          得錢鐘書老人的圍城理論精辟有理。我們?cè)絹碓襟w會(huì)到人在江湖身不由己的無奈。我們
          越來
          越感到心力交瘁,壓抑茫然。

          ……
          ……

          可是,以后的路還很長,無論如何,我們得活下去。不管是痛苦還是快樂,我們都要面

          對(duì)。畢竟想逃避也逃避不了的。所以,我們還是希望,明天是一個(gè)陽光燦爛的大好日
          子。而
          且,我們骨子里仍然相信自己會(huì)走出陰霾,出人頭地。


          再回首,燈火闌珊處沒有伊人,只有自己的夢想在風(fēng)中輕輕地?fù)u曳……

          posted @ 2005-10-27 13:12 rkind 閱讀(173) | 評(píng)論 (0)編輯 收藏
          有位心理學(xué)家曾寫道,一個(gè)成熟稱得上真愛的戀情

            必須經(jīng)過四個(gè)階段,那就是:

            共存(codependent)

            反依賴(counterdependent)

            獨(dú)立(independent)

            共生(interdependent)

            階段之間轉(zhuǎn)換所需的時(shí)間不一定,因人而易。

            第一個(gè)階段:共存。

            這是熱戀時(shí)期,情人不論何時(shí)何地總希望能膩在一起。

            第二個(gè)階段:反依賴。

            等到情感穩(wěn)定后,

            至少會(huì)有一方想要有多一點(diǎn)自己的時(shí)間作自己想做的事,這時(shí)另一方就會(huì)感到被

            冷落。

            第三個(gè)階段:獨(dú)立。

            這是第二個(gè)階段的延續(xù),要求更多獨(dú)立自主的時(shí)間。

            第四個(gè)階段:共生。

            這時(shí)新的相處之道已經(jīng)成形,

            你(妳)的他(她)已經(jīng)成為你(妳)最親的人。

            你們?cè)谝黄鹣嗷シ龀帧⒁黄痖_創(chuàng)屬于你們自己的人生。

            你們?cè)谝黄鸩粫?huì)互相牽絆,而會(huì)互相成長。

            但是,大部分的人都通不過第二或第三階段,

            而選擇分手一途,這是非常可惜的。

            很多事只要好好溝通都會(huì)沒事的,不要耍個(gè)性,

            不要想太多要互相信任,這樣第二、三階段的時(shí)間就會(huì)縮短。

            和所愛的人相遇相戀是非常不容易的,不要輕言放棄。

             兩人相聚是因?yàn)橛芯墸嘀且驗(yàn)橛行模娴牡煤煤谜湎н@福份莫說分手不是

            無由,

            希望看到上述的四個(gè)階段,

            真能給大家一些啟示與領(lǐng)悟并惜緣

            我們會(huì)逐漸變成我們所愛的人。

            妳和他本來沒有相同之處,外表不相像,性格也是南轅北轍,一旦愛上了,年深

            日久,

            妳會(huì)驚訝妳的眼睛有點(diǎn)像他的眼睛,他的微笑也有點(diǎn)像妳的微笑。

            你們走路的步伐也有點(diǎn)相似,說話的語氣也愈來愈相像。他的脖子上有一顆痣,

            一天,妳發(fā)現(xiàn)自己脖子上也多了一顆痣,原來我們會(huì)變成我們所愛的人。

            妳本來喜歡腳踏實(shí)地的人,而他一向比較輕佻,但你們愛上了,

            他竟會(huì)不知不覺變成一個(gè)老實(shí)人,這個(gè)改變,連他自己也不曾察覺。

            他本來喜歡活潑的女孩子,卻愛上了拘謹(jǐn)?shù)膴叄@些日子,妳竟愈來愈活潑,

            妳差點(diǎn)認(rèn)不出自己。我們會(huì)逐漸變成對(duì)方理想中的人,這種改變,

            絕對(duì)不是刻意的。兩個(gè)人愈愛得長久,氣質(zhì)也愈來愈相近,

            妳曾經(jīng)以為他不是妳夢寐以求的那種類型,然而,有一天,妳驚訝地發(fā)現(xiàn),

            他已經(jīng)變成妳喜歡的那種類型,妳不必再到處尋覓,他就是妳要找的人。

            深深愛著一個(gè)人的時(shí)候,妳原來真的會(huì)一點(diǎn)一點(diǎn)的失去自己,

            為甚么妳還會(huì)覺得快樂呢?

            大概是因?yàn)閵呍谑サ漠?dāng)兒,也是賺了,妳把他的氣質(zhì)和他的微笑都賺回來..

            幸福很單純...

            所以要很單純的人才容易獲得.....

            與我親愛的朋友們分享之
          posted @ 2005-10-27 13:11 rkind 閱讀(169) | 評(píng)論 (0)編輯 收藏
          Struts和JSF/Tapestry都屬于表現(xiàn)層框架,這兩種分屬不同性質(zhì)的框架,后者是一種事件驅(qū)動(dòng)型的組件模型,而Struts只是單純的MVC模式框架,老外總是急吼吼說事件驅(qū)動(dòng)型就比MVC模式框架好,何以見得,我們下面進(jìn)行詳細(xì)分析比較一下到底是怎么回事?

          首先事件是指從客戶端頁面(瀏覽器)由用戶操作觸發(fā)的事件,Struts使用Action來接受瀏覽器表單提交的事件,這里使用了Command模式,每個(gè)繼承Action的子類都必須實(shí)現(xiàn)一個(gè)方法execute。

          在Struts中,實(shí)際是一個(gè)表單Form對(duì)應(yīng)一個(gè)Action類(或DispatchAction),換一句話說:在Struts中實(shí)際是一個(gè)表單只能對(duì)應(yīng)一個(gè)事件,Struts這種事件方式稱為application event,application event和Component event相比是一種粗粒度的事件。

          Struts重要的表單對(duì)象ActionForm是一種對(duì)象,它代表了一種應(yīng)用,這個(gè)對(duì)象中至少包含幾個(gè)字段,這些字段是Jsp頁面表單中的input字段,因?yàn)橐粋€(gè)表單對(duì)應(yīng)一個(gè)事件,所以,當(dāng)我們需要將事件粒度細(xì)化到表單中這些字段時(shí),也就是說,一個(gè)字段對(duì)應(yīng)一個(gè)事件時(shí),單純使用Struts就不太可能,當(dāng)然通過結(jié)合JavaScript也是可以轉(zhuǎn)彎實(shí)現(xiàn)的。

          而這種情況使用JSF就可以方便實(shí)現(xiàn)

          <h:inputText id="userId" value="#{login.userId}">
          <f:valueChangeListener type="logindemo.UserLoginChanged" />
          </h:inputText>


          #{login.userId}表示從名為login的JavaBean的getUserId獲得的結(jié)果,這個(gè)功能使用struts也可以實(shí)現(xiàn),name="login" property="userId"

          關(guān)鍵是第二行,這里表示如果userId的值改變并且確定提交后,將觸發(fā)調(diào)用類UserLoginChanged的processValueChanged(...)方法。

          JSF可以為組件提供兩種事件:Value Changed和 Action. 前者我們已經(jīng)在上節(jié)見識(shí)過用處,后者就相當(dāng)于struts中表單提交Action機(jī)制,它的JSF寫法如下:

          <h:commandButton id="login" commandName="login">
          <f:actionListener type=”logindemo.LoginActionListener” />
          </h:commandButton>
          從代碼可以看出,這兩種事件是通過Listerner這樣觀察者模式貼在具體組件字段上的,而Struts此類事件是原始的一種表單提交Submit觸發(fā)機(jī)制。如果說前者比較語言化(編程語言習(xí)慣做法類似Swing編程);后者是屬于WEB化,因?yàn)樗莵碜訦tml表單,如果你起步是從Perl/PHP開始,反而容易接受Struts這種風(fēng)格。

          基本配置

          Struts和JSF都是一種框架,JSF必須需要兩種包JSF核心包、JSTL包(標(biāo)簽庫),此外,JSF還將使用到Apache項(xiàng)目的一些commons包,這些Apache包只要部署在你的服務(wù)器中既可。

          JSF包下載地址:http://java.sun.com/j2ee/javaserverfaces/download.html選擇其中Reference Implementation。

          JSTL包下載在http://jakarta.apache.org/site/downloads /downloads_taglibs-standard.cgi

          所以,從JSF的驅(qū)動(dòng)包組成看,其開源基因也占據(jù)很大的比重,JSF是一個(gè)SUN伙伴們工業(yè)標(biāo)準(zhǔn)和開源之間的一個(gè)混血兒。

          上述兩個(gè)地址下載的jar合并在一起就是JSF所需要的全部驅(qū)動(dòng)包了。與Struts的驅(qū)動(dòng)包一樣,這些驅(qū)動(dòng)包必須位于Web項(xiàng)目的WEB-INF/lib,和Struts一樣的是也必須在web.xml中有如下配置:

          <web-app>
            <servlet>
            <servlet-name>Faces Servlet</servlet-name>
            <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
            </servlet> 
            <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>*.faces</url-pattern>
            </servlet-mapping> 
              </web-app>


          這里和Struts的web.xml配置何其相似,簡直一模一樣。

          正如Struts的struts-config.xml一樣,JSF也有類似的faces-config.xml配置文件:

          <faces-config>
            <navigation-rule>
            <from-view-id>/index.jsp</from-view-id>
            <navigation-case>
             <from-outcome>login</from-outcome>
            <to-view-id>/welcome.jsp</to-view-id>
            </navigation-case>
            </navigation-rule> 
            <managed-bean> 
            <managed-bean-name>user</managed-bean-name>
            <managed-bean-class>com.corejsf.UserBean</managed-bean-class> 
            <managed-bean-scope>session</managed-bean-scope> 
            </managed-bean>
              </faces-config>
          在Struts-config.xml中有ActionForm Action以及Jsp之間的流程關(guān)系,在faces-config.xml中,也有這樣的流程,我們具體解釋一下Navigation:

          在index.jsp中有一個(gè)事件:




          <h:commandButton label="Login" action="login" />


          Action的值必須匹配form-outcome值,上述Navigation配置表示:如果在index.jsp中有一個(gè)login事件,那么事件觸發(fā)后下一個(gè)頁面將是welcome.jsp

          JSF有一個(gè)獨(dú)立的事件發(fā)生和頁面導(dǎo)航的流程安排,這個(gè)思路比struts要非常清晰。

          managed-bean類似Struts的ActionForm,正如可以在struts-config.xml中定義ActionForm的scope一樣,這里也定義了managed-bean的scope為session。

          但是如果你只以為JSF的managed-bean就這點(diǎn)功能就錯(cuò)了,JSF融入了新的Ioc模式/依賴性注射等技術(shù)。

          Ioc模式

          對(duì)于Userbean這樣一個(gè)managed-bean,其代碼如下:

          public class UserBean {
            private String name;
            private String password;
          
            // PROPERTY: name
            public String getName() { return name; }
            public void setName(String newValue) { name = newValue; }
          
            // PROPERTY: password
            public String getPassword() { return password; }
            public void setPassword(String newValue) { password = newValue; }
              }
          
              <managed-bean>
            <managed-bean-name>user</managed-bean-name>
            <managed-bean-class>com.corejsf.UserBean</managed-bean-class>
            <managed-bean-scope>session</managed-bean-scope>
          
            <managed-property>
            <property-name>name</property-name>
            <value>me</value>
            </managed-property>
          
            <managed-property>
            <property-name>password</property-name>
            <value>secret</value>
            </managed-property>
              </managed-bean>
          faces-config.xml這段配置其實(shí)是將"me"賦值給name,將secret賦值給password,這是采取Ioc模式中的Setter注射方式。

          Backing Beans

          對(duì)于一個(gè)web form,我們可以使用一個(gè)bean包含其涉及的所有組件,這個(gè)bean就稱為Backing Bean, Backing Bean的優(yōu)點(diǎn)是:一個(gè)單個(gè)類可以封裝相關(guān)一系列功能的數(shù)據(jù)和邏輯。

          說白了,就是一個(gè)Javabean里包含其他Javabean,互相調(diào)用,屬于Facade模式或Adapter模式。

          對(duì)于一個(gè)Backing Beans來說,其中包含了幾個(gè)managed-bean,managed-bean一定是有scope的,那么這其中的幾個(gè)managed-beans如何配置它們的scope呢?

          <managed-bean>
            ...
            <managed-property>
            <property-name>visit</property-name>
            <value>#{sessionScope.visit}</value>
            </managed-property>


          這里配置了一個(gè)Backing Beans中有一個(gè)setVisit方法,將這個(gè)visit賦值為session中的visit,這樣以后在程序中我們只管訪問visit對(duì)象,從中獲取我們希望的數(shù)據(jù)(如用戶登陸注冊(cè)信息),而visit是保存在session還是application或request只需要配置既可。

          UI界面

          JSF和Struts一樣,除了JavaBeans類之外,還有頁面表現(xiàn)元素,都是是使用標(biāo)簽完成的,Struts也提供了struts-faces.tld標(biāo)簽庫向JSF過渡。

          使用Struts標(biāo)簽庫編程復(fù)雜頁面時(shí),一個(gè)最大問題是會(huì)大量使用logic標(biāo)簽,這個(gè)logic如同if語句,一旦寫起來,搞的JSP頁面象俄羅斯方塊一樣,但是使用JSF標(biāo)簽就簡潔優(yōu)美:

          <jia:navigatorItem name="inbox" label="InBox"
            icon="/images/inbox.gif"
            action="inbox"
            disabled="#{!authenticationBean.inboxAuthorized}"/>


          如果authenticationBean中inboxAuthorized返回是假,那么這一行標(biāo)簽就不用顯示,多干凈利索!

          先寫到這里,我會(huì)繼續(xù)對(duì)JSF深入比較下去,如果研究過Jdon框架的人,可能會(huì)發(fā)現(xiàn),Jdon框架的jdonframework.xml中service配置和managed-bean一樣都使用了依賴注射,看來對(duì)Javabean的依賴注射已經(jīng)迅速地成為一種新技術(shù)象征,如果你還不了解Ioc模式,趕緊補(bǔ)課。
          posted @ 2005-10-27 13:07 rkind 閱讀(147) | 評(píng)論 (0)編輯 收藏
          Struts常見錯(cuò)誤匯總
          以下所說的struts-config.xml和ApplicationResources.properties等文件名是缺省時(shí)使用的,如果你使用了多模塊,或指定了不同的資源文件名稱,這些名字要做相應(yīng)的修改。

            1、“No bean found under attribute key XXX”
            在struts-config.xml里定義了一個(gè)ActionForm,但type屬性指定的類不存在,type屬性的值應(yīng)該是Form類的全名。或者是,在Action的定義中,name或attribute屬性指定的ActionForm不存在。

            2、“Cannot find bean XXX in any scope”
            在Action里一般會(huì)request.setAttribute()一些對(duì)象,然后在轉(zhuǎn)向的jsp文件里(用tag或request.getAttribute()方法)得到這些對(duì)象并顯示出來。這個(gè)異常是說jsp要得到一個(gè)對(duì)象,但前面的Action里并沒有將對(duì)象設(shè)置到request(也可以是session、servletContext)里。
          可能是名字錯(cuò)了,請(qǐng)檢查jsp里的tag的一般是name屬性,或getAttribute()方法的參數(shù)值;或者是Action邏輯有問題沒有執(zhí)行setAttribute()方法就先轉(zhuǎn)向了。
          還有另外一個(gè)可能,純粹是jsp文件的問題,例如<logic:iterate>會(huì)指定一個(gè)id值,然后在循環(huán)里<bean:write>使用這個(gè)值作為name的值,如果這兩個(gè)值不同,也會(huì)出現(xiàn)此異常。(都是一個(gè)道理,request里沒有對(duì)應(yīng)的對(duì)象。)

            3、“Missing message for key "XXX"”
            缺少所需的資源,檢查ApplicationResources.properties文件里是否有jsp文件里需要的資源,例如:
            <bean:message key="msg.name.prompt"/>
            這行代碼會(huì)找msg.name.prompt資源,如果AppliationResources.properties里沒有這個(gè)資源就會(huì)出現(xiàn)本異常。在使用多模塊時(shí),要注意在模塊的struts-config-xxx.xml里指定要使用的資源文件名稱,否則當(dāng)然什么資源也找不到,這也是一個(gè)很容易犯的錯(cuò)誤。

            4、“No getter method for property XXX of bean teacher”
            這條異常信息說得很明白,jsp里要取一個(gè)bean的屬性出來,但這個(gè)bean并沒有這個(gè)屬性。你應(yīng)該檢查jsp中某個(gè)標(biāo)簽的property屬性的值。例如下面代碼中的cade應(yīng)該改為code才對(duì):
            <bean:write name="teacher" property="cade" filter="true"/>

            5、“Cannot find ActionMappings or ActionFormBeans collection”
            待解決。

            6、“Cannot retrieve mapping for action XXX”
            在.jsp的<form>標(biāo)簽里指定action='/XXX',但這個(gè)Action并未在struts-config.xml里設(shè)置過。

            7、HTTP Status 404 - /xxx/xxx.jsp
            Forward的path屬性指向的jsp頁面不存在,請(qǐng)檢查路徑和模塊,對(duì)于同一模塊中的Action轉(zhuǎn)向,path中不應(yīng)包含模塊名;模塊間轉(zhuǎn)向,記住使用contextRelative="true"。

            8、沒有任何異常信息,顯示空白頁面
            可能是Action里使用的forward與struts-config.xml里定義的forward名稱不匹配。

            9、“The element type "XXX" must be terminated by the matching end-tag "XXX".”
            這個(gè)是struts-config.xml文件的格式錯(cuò)誤,仔細(xì)檢查它是否是良構(gòu)的xml文件,關(guān)于xml文件的格式這里就不贅述了。

            10、“Servlet.init() for servlet action threw exception”
            一般出現(xiàn)這種異常在后面會(huì)顯示一個(gè)關(guān)于ActionServlet的異常堆棧信息,其中指出了異常具體出現(xiàn)在代碼的哪一行。我曾經(jīng)遇到的一次提示如下:

            java.lang.NullPointerException
             at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:1003)
             at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:955)

            為解決問題,先下載struts的源碼包,然后在ActionServlet.java的第1003行插入斷點(diǎn),并對(duì)各變量進(jìn)行監(jiān)視。很丟人,我竟然把struts-config.xml文件弄丟了,因此出現(xiàn)了上面的異常,應(yīng)該是和CVS同步時(shí)不小心刪除的。

            11、“Resources not defined for Validator”
            這個(gè)是利用Validator插件做驗(yàn)證時(shí)可能出現(xiàn)的異常,這時(shí)你要檢查validation.xml文件,看里面使用的資源是否確實(shí)有定義,form的名稱是否正確,等等。
          posted @ 2005-10-27 13:06 rkind 閱讀(203) | 評(píng)論 (0)編輯 收藏
          Jbuilder2006自帶了1.5的JDK,但如果你還想繼續(xù)用JDK1.42,如果只是在Jbuilder2006的tool->configure->JDKs中添加一個(gè)JDK1.42或更低版本,那么即使你只寫一個(gè)最簡單的HelloWorld程序,Jbuilder2006都會(huì)給你報(bào)出長長一串錯(cuò)誤,編寫的代碼在Jbuilder2005中也無法運(yùn)行。我在剛使用Jbuilder2006時(shí),被這個(gè)問題困惑了好久,在網(wǎng)上查了好久也沒有找到解決的方法。
          今天花了兩個(gè)小時(shí),終于在Jbuilder2006的幫助中查到了問題的原因。Jbuilder2006在運(yùn)行編譯工程時(shí),會(huì)針對(duì)特定版本的VM進(jìn)行編譯,默認(rèn)的是Java 2 SDK, v 5.0 And Late,因此,如果工程用的是1.5以下的JDK,碰到都是java.lang.UnsupportedClassVersionError這個(gè)錯(cuò)誤。

          解決的辦法其實(shí)很簡單,只要更改這個(gè)選項(xiàng)就行了。具體步驟如下:
          ----------------------------------------------------------
          1、右鍵點(diǎn)擊工程文件,選擇屬性(properties),
          2、在屬性窗口中選擇 Build-->Java,在右邊的選項(xiàng)中有四個(gè)下拉框,就可以看到編譯選項(xiàng)了,
          3、其中Compiler和Debug Option可以不用管,只在Languege features和Target VM中選擇相應(yīng)的JDK版本就可以了,然后確定,一切OK。
          附件中是配置的圖片。
          -----------------------------------------------------------
          如果在Target VM中選擇了All Java SDKs,那么你的class文件在使用JDK1.1的VM上都可以運(yùn)行(Jbuilder2006幫助中是這么說的,估計(jì)沒幾個(gè)人的機(jī)子上還在用JDK1.1吧 :-)

          posted @ 2005-10-27 13:06 rkind 閱讀(273) | 評(píng)論 (0)編輯 收藏

          打算要做一個(gè)工作總結(jié)平臺(tái),考慮到要實(shí)現(xiàn)周工作總結(jié)的功能就得先把一年先按某周某周區(qū)分開來,查了查Api

          采用了calendar類,并把最后分的結(jié)果傳到數(shù)據(jù)庫,

          year        week          content

          2005        1                 1月3日~1月9日

          ...              ...                .................... 

          源碼如下(其中DB類是我用來實(shí)現(xiàn)數(shù)據(jù)庫連接用的)

          import java.util.*;
          import java.util.Date;
          import java.sql.*;
          import rkind.db;
          public class shijian {
           public static void main(String args[]){
            int day,mon,year,week,dayofweek;  
            db base=new db();
            String content="";
            Calendar nova = Calendar.getInstance();
            
            Date d1=new Date(); 
            nova.setTime(d1);
            nova.set(2005,Calendar.JANUARY,1);
            //nova.add(Calendar.DATE,6);
            //day=nova.get(Calendar.WEEK_OF_YEAR );
            dayofweek=nova.get(Calendar.DAY_OF_WEEK  );
            while(dayofweek!=2){
            nova.add(Calendar.DATE,1);
            dayofweek=nova.get(Calendar.DAY_OF_WEEK  );
            }
            year=nova.get(Calendar.YEAR);
            //String sql=new String("insert into shijian(year,week,content) values('"+year+"','"+week+"','"+content+"')");
            //System.out.println("day+++:"+day);
            while(year==2005){ 
             week=nova.get(Calendar.WEEK_OF_YEAR );
             mon=nova.get(Calendar.MONTH)+1;
             day=nova.get(Calendar.DATE);
             
             content=mon+"月"+day+"日"+"~~ ";  
             
             System.out.print("第"+week+"周"+":  "+mon+"月"+day+"日");
             nova.add(Calendar.DATE,6);
             week=nova.get(Calendar.WEEK_OF_YEAR );
             mon=nova.get(Calendar.MONTH)+1;
             day=nova.get(Calendar.DATE);
             
             content+=mon+"月"+day+"日";
             try{
              String sql=new String("insert into shijian(year,week,content) values('"+year+"','"+week+"','"+content+"')");
              base.executeUpdate(sql); 
             }catch(Exception e){System.out.println(e);}
             
             System.out.println("~~~~"+mon+"月"+day+"日");
             
             
             
             nova.add(Calendar.DATE,1);
             week=nova.get(Calendar.WEEK_OF_YEAR );
             mon=nova.get(Calendar.MONTH)+1;
             day=nova.get(Calendar.DATE);
             year=nova.get(Calendar.YEAR);
             
             
            }
           
           } 
           
          }

          雖然功能上實(shí)現(xiàn)了,但是還有大量的重復(fù)代碼,和費(fèi)語句,這就是沒有好好重視J2se的結(jié)果,沒辦法,

          邊學(xué)J2EE邊看Se吧,:)

          posted @ 2005-10-27 13:05 rkind 閱讀(191) | 評(píng)論 (0)編輯 收藏

          今天在Mysql中建立了一個(gè)名叫Option的表,結(jié)果無論如何都不能訪問,后來換了個(gè)名字就OK了,應(yīng)而想到了是Mysql的保留字,搜了一下,發(fā)現(xiàn)以下字段都是它的保留字

          action  add  aggregate  all 
          alter  after  and  as 
          asc  avg  avg_row_length  auto_increment 
          between  bigint  bit  binary 
          blob  bool  both  by 
          cascade  case  char  character 
          change  check  checksum  column 
          columns  comment  constraint  create 
          cross  current_date  current_time  current_timestamp 
          data  database  databases  date 
          datetime  day  day_hour  day_minute 
          day_second  dayofmonth  dayofweek  dayofyear 
          dec  decimal  default  delayed 
          delay_key_write  delete  desc  describe 
          distinct  distinctrow  double  drop 
          end  else  escape  escaped 
          enclosed  enum  explain  exists 
          fields  file  first  float 
          float4  float8  flush  foreign 
          from  for  full  function 
          global  grant  grants  group 
          having  heap  high_priority  hour 
          hour_minute  hour_second  hosts  identified 
          ignore  in  index  infile 
          inner  insert  insert_id  int 
          integer  interval  int1  int2 
          int3  int4  int8  into 
          if  is  isam  join 
          key  keys  kill  last_insert_id 
          leading  left  length  like 
          lines  limit  load  local 
          lock  logs  long  longblob 
          longtext  low_priority  max  max_rows 
          match  mediumblob  mediumtext  mediumint 
          middleint  min_rows  minute  minute_second 
          modify  month  monthname  myisam 
          natural  numeric  no  not 
          null  on  optimize  option 
          optionally  or  order  outer 
          outfile  pack_keys  partial  password 
          precision  primary  procedure  process 
          processlist  privileges  read  real 
          references  reload  regexp  rename 
          replace  restrict  returns  revoke 
          rlike  row  rows  second 
          select  set  show  shutdown 
          smallint  soname  sql_big_tables  sql_big_selects 
          sql_low_priority_updates  sql_log_off  sql_log_update  sql_select_limit 
          sql_small_result  sql_big_result  sql_warnings  straight_join 
          starting  status  string  table 
          tables  temporary  terminated  text 
          then  time  timestamp  tinyblob 
          tinytext  tinyint  trailing  to 
          type  use  using  unique 
          unlock  unsigned  update  usage 
          values  varchar  variables  varying 
          varbinary  with  write  when 
          where  year  year_month  zerofill 


          posted @ 2005-10-27 13:05 rkind 閱讀(240) | 評(píng)論 (0)編輯 收藏

          最近用JSP做新聞發(fā)布時(shí)發(fā)現(xiàn),用rs.getString()獲得的字符串里面空格和換行都表現(xiàn)不出來,

          先分析原因,我用的是Mysql數(shù)據(jù)庫,新聞內(nèi)容采用的是Text類型,查看數(shù)據(jù)庫中上傳的新聞發(fā)現(xiàn)里面換行和空格都能表現(xiàn)出來,這就說明,肯定是用Rs.getstring時(shí)顯示的問題,先查看了Java.sql.*的Api想用別的Get方法,試了幾個(gè)結(jié)果都不行,

          網(wǎng)上也有這樣類似的問題,但大多是在Servlet里面或者Bean里面專門的做一個(gè)函數(shù)解決的,我覺得這樣做很復(fù)雜

          最后終于找到了的解決方法,在調(diào)用Rs.getstring的頁面里面的表格中加入style="word-break:break-all"

          并用<pre>rs.getString()<>標(biāo)簽來顯示就解決了換行的問題。其中<pre></pre>這句話一定不能少

          然而加入這些以后,當(dāng)一行內(nèi)容過長時(shí),表格依然會(huì)被撐開,需要在表格胡Style屬性修改成style="table-layout: fixed; word-wrap: break-word" 這樣才能真正解決中文撐開表格的問題。


          posted @ 2005-10-27 13:04 rkind 閱讀(294) | 評(píng)論 (0)編輯 收藏

          安全域是Tomcat服務(wù)器中用來保護(hù)Web應(yīng)用資源的一種機(jī)制,在安全域中可以配置安全驗(yàn)證信息,即用戶以及用戶和角色的映射關(guān)系,每個(gè)用戶可以擁有一或多個(gè)角色,每個(gè)角色限定了可以用來訪問的WEb資源

          它包括以下四種類型

          1 內(nèi)存域 MemoryRealm 從XML中讀取安全驗(yàn)證信息,并把它們以一組對(duì)象的形式存放在內(nèi)存中

          2 Jdbc域 JDBCREALM 通過JDBC驅(qū)動(dòng)訪問存放在數(shù)據(jù)庫中的安全驗(yàn)證信息,

          3 數(shù)據(jù)源域 DataSouceRealm 通過JNDI數(shù)據(jù)源訪問存在數(shù)據(jù)庫中安全信息

          4Jndi 域 JNDIRealm 通過JNDI provider訪問基于LDAP的目錄服務(wù)器中安全驗(yàn)證信息

          配置過程有以下2部

          1為WEB資源設(shè)置安全約束

          (1)在web.xml中加入<sercurity-constraint>元素,對(duì)要過濾的文件類型限制

          (2)在WEB中加入<logiin-config> Tomcat中支持三種驗(yàn)證方法,1基本驗(yàn)證,2摘要驗(yàn)證3基于表單驗(yàn)證

          摘要驗(yàn)證其實(shí)就是對(duì)第一種方法進(jìn)行過密碼加密的方法,而表單驗(yàn)證是通過自己的做的longin的頁面實(shí)現(xiàn)

          (3)在web.xml中加入<security-role>元素指明手所有角色的名字

          2在CONF/SERVER.XML中配置REALM,這個(gè)元素中指定安全域的類名以及相關(guān)屬性。

          需要注意的是內(nèi)存域是把用戶和角色數(shù)據(jù)存放在Tomcat-users.xml中

          后2種都是存放在數(shù)據(jù)庫中,尤其是配置數(shù)據(jù)源域的時(shí)候,一定要把DATASOURCE存放在《GlobalNamingResouces》標(biāo)簽下,否則雖然能正常使用但做驗(yàn)證時(shí)會(huì)訪問不到數(shù)據(jù)庫,不能驗(yàn)證成功


          posted @ 2005-10-27 13:04 rkind 閱讀(203) | 評(píng)論 (0)編輯 收藏

          前兩天得到了一個(gè)成績的數(shù)據(jù)庫,可是是DBF的,因?yàn)橄朐贛ysql環(huán)境中做一個(gè)成績分析,可是沒辦法導(dǎo)入

          ,于是先導(dǎo)入SQlsever2000中,想生成SQL腳本,然后再在Mysql Front中改入。SQL文件,可是發(fā)現(xiàn)導(dǎo)出來的腳本只有創(chuàng)建表的SQL腳本,沒有數(shù)據(jù)的腳本,無奈,

          后來又想找個(gè)軟件試一下,下了一個(gè)什么DBF To Mysql 在未破解的情況下,只可以導(dǎo)入6行數(shù)據(jù)(!汗)

          用了破解補(bǔ)丁以后導(dǎo)入的時(shí)候出錯(cuò),軟件上說庫限制的是8M,可是我的庫只有6M多一點(diǎn),試了幾次也不行

          然后只好繼續(xù)用Sql2000試,選導(dǎo)出的時(shí)候發(fā)現(xiàn)可以選擇導(dǎo)出文本和CSV文件,而在我的MYsqlfront里面支持導(dǎo)

          入CSV文件,于是先用SQl2000導(dǎo)出文本文件,把后綴名改為CSv,再從Mysql中一導(dǎo)入OK,

          后來在使用中才發(fā)現(xiàn),用這種方法導(dǎo)入以后,有的是Char類型的字段在Mysql front中被認(rèn)為是Int類型的,

          可是在Phpmyadmin中字段顯示正常。

          posted @ 2005-10-27 13:03 rkind 閱讀(809) | 評(píng)論 (0)編輯 收藏
          僅列出標(biāo)題
          共8頁: 上一頁 1 2 3 4 5 6 7 8 下一頁 
          主站蜘蛛池模板: 中江县| 浙江省| 攀枝花市| 大同市| 博野县| 阜城县| 青川县| 那曲县| 达拉特旗| 德令哈市| 济源市| 十堰市| 岳阳市| 安陆市| 六枝特区| 观塘区| 志丹县| 迭部县| 红河县| 新竹县| 拉孜县| 光山县| 海门市| 安阳县| 岢岚县| 凤庆县| 敖汉旗| 东乡族自治县| 从江县| 洪泽县| 鹿邑县| 定襄县| 西平县| 惠东县| 耿马| 石台县| 清丰县| 亚东县| 临潭县| 郎溪县| 阿尔山市|