2006年12月28日

          ?public ActionErrors validate(ActionMapping actionMapping,
          ???????????????????????????????? HttpServletRequest httpServletRequest) {
          ??????? String style =
          ??????????????? "^[a-zA-Z][a-zA-Z0-9._-]*@([a-zA-Z0-9-_]+\\.)+(com|gov|net|com\\.cn|edu\\.cn)$";
          ??????? Pattern ptt = Pattern.compile(style);
          ??????? Matcher mch=ptt.matcher(email);
          ??????? ActionErrors errors = new ActionErrors();
          ??????? if ((name == null || name.equals(""))) {
          ??????????? ActionError error = new ActionError("error.name");
          ??????????? errors.add("name", error);
          ??????? } else
          ??????? if (!mch.matches()) {
          ??????????? ActionError error = new ActionError("error.email");
          ??????????? errors.add("email", error);
          ??????? }
          ??????? return errors;
          ??? }

          posted @ 2006-12-28 11:58 鷺 閱讀(1304) | 評論 (0)編輯 收藏

          在Struts中,擔任 MVC / Model 2 中Controller角色的是ActionServlet,所有的請求都必須先通過它,然而在Struts 1.1後,有關於請求的處理大部份已交由RequestProcessor,當ActionServlet收到GET或POST的請求,其doGet() 或doPost()會呼叫process()方法來處理請求:
          protected void process(HttpServletRequest request,
          ??????????????????????? HttpServletResponse response)
          ?????????????????? throws IOException, ServletException {
          ??? RequestUtils.selectApplication(request,
          ?????????????????????????????????? getServletContext());
          ??? getApplicationConfig(
          ???????? request).getProcessor().process(request, response);
          }
          ?
          RequestUtils是個工具類,ActionServlet呼叫其selectApplication()方法,藉由 request.getServletPath()來取得請求路徑以選擇應用程式模塊來處理請求,之後從ApplicationConfig物件取得 RequestProcessor物件,將使用者的請求委托它來進行處理。

          通常是將ActionServlet當作黑盒子,您只要使用它,然而您也可以繼承ActionServlet來定義自己的控制器,但由於在Struts 1.1中大部份的請求已經委托RequestProcessor來處理,繼承ActionServlet來定義自己的控制器請求處理意義已經不大,通常的 目的是重新定義ActionServlet的init()方法,增加自己的初始化動作:
          public class CustomActionServlet extends ActionServlet {
          ??? public void init() throws ServletException {
          ??????? super.init();

          ??????? // 增加自己的初始化動作
          ??????? ....
          ??? }
          }
          ?
          預設的RequestProcessor物件是org.apache.struts.action.RequestProcessor,您可以藉由觀看 process()方法的原始碼來了解它作了哪些事情:
          public void process(HttpServletRequest request,
          ???????????????????? HttpServletResponse response)
          ????????????????? throws IOException, ServletException {
          ??? // 處理 contentType 為 multipart/form-data 的 POST 請求
          ??? request = processMultipart(request);

          ??? // 取得 URI 路徑
          ??? String path = processPath(request, response);
          ??? if(path == null)
          ??????? return;
          ??? .....

          ??? // 確定客戶端的位置
          ??? // 是否要將一個Locale物件儲存在 session 中
          ??? // 配合 <controller> 的 locale 屬性使用
          ??? processLocale(request, response);

          ??? // 確定contentType,預設是 text/html
          ??? processContent(request, response);

          ??? // 判斷<controller>屬性nocache是否被確定
          ??? // 若是,在 response 中加入防止快取的header
          ??? processNoCache(request, response);

          ??? // 前置處理,預設返回 true
          ??? //子類可以重新定義它以決定要不要繼續處理
          ??? if(!processPreProcess(request, response)) {
          ??????? return;
          ??? }

          ??? // 從URI路徑確定ActionMapping
          ??? ActionMapping mapping =
          ?????????????????? processMapping(request, response, path);
          ??? if(mapping == null) {
          ??????? return;
          ??? }

          ??? ....

          ??? // 處理ActionForm
          ??? // 如果沒有就新增一個,之後一直使用它
          ??? ActionForm form =
          ??????????? processActionForm(request, response, mapping);
          ???
          ??? // 將表單的欄位值填入ActionForm
          ??? processPopulate(request, response, form, mapping);

          ??? // 判斷是否執行ActionForm的validate()方法
          ??? if(!processValidate(request, response, form, mapping)) {
          ??????? return;
          ??? }

          ??? // 判斷 標簽的 forward 或 include 標簽
          // 是不是被設定,這兩個標簽在設定一個路徑
          // 其與 type 屬性是互斥的,當設定其中一個屬性時
          // 調用 RequestDispatcher 的 forward() 或 include()
          // 其作用與設定ForwardAction或IncludeAction相同
          // 直接繞送而不再使用Action物件進行接下來的處理

          ??? if(!processForward(request, response, mapping)) {
          ??????? return;
          ??? }
          ??? if(processInclude(request, response, mapping)) {
          ??????? return;
          ??? }

          ??? // 處理Action,如果沒有就生成一個,之後一直使用它
          ??? Action action =
          ??????????? processActionCreate(request, response, mapping);
          ??? if(action == null) {
          ??????? return;
          ??? }

          ??? // 呼叫Action的execute()或perform()方法
          // 并返回ActionForward

          ??? ActionForward forward =
          ??????????????????? processActionPerform(request,
          ???????????????????????????????????????? response,
          ???????????????????????????????????????? action,
          ???????????????????????????????????????? for, mapping);

          ??? // 處理ActionForward
          ??? processActionForward(request, response, forward);
          }
          ?

          您可以繼承RequestProcessor,并改寫其中的processXXXXX()方法來自定義請求的處理方式,如果您要使用自己的 RequestProcessor,要在struts-config.xml中使用<controller>標簽來定義,例如:
          • struts-config.xml
          ...
          <controller
          contentType="text/html;charset=Big5"
          locale="true"
          nocache="true"
          processorClass="caterpillar.CustomRequestProcessor"/>
          ...

          在Struts 1.1後,新增了<controller>標簽,它可以用於指定ActionServlet的一些參數,在Struts 1.1之前,這些參數是在<init-params>中加以指定,使用<controller>標簽,應用程式中不同的模組也可 以指定各自的參數給ActionServlet。

          posted @ 2006-12-28 10:24 鷺 閱讀(830) | 評論 (0)編輯 收藏

          2006年12月27日

          html:link有很多參數選項,如關鍵有:
          action --指定點擊鏈接后,進入的*.do動作action的值不需要跟后綴,struts自動補上.do
          page? -- 跟action一樣的功能,不過這個不會自動補.do,也就是說可以鏈接其他類型的動作,如html,jsp,php等

          paramId--指定參數的key名稱,如要輸出paramName -- 能識別作用域(任意)內的Object的名稱。
          paramProperty--paramName的輸出屬性,paramId,paramName ,paramProperty可以組成單一參數傳遞的link,如<html:link? action="/PRC301E1"? paramId="prc_no" paramName="element" paramProperty="fjPrcNo">,當element.getfjPrcNo()的值為prc1時,則輸出為
          http://xxoo.com/PRC301E1.do?prc_no=prc1

          name--為HashMap屬性的對象,用此屬性,可以進行多參數輸出。例:

          CODE:
          [Copy to clipboard]
          ???? <%
          ??????? HashMap map=new HashMap();
          ?????? map.put("check","22");
          ?????? map.put("name","abc");
          ?????? pageContext.setAttribute("map",map); //因為所有tag的取值只會搜索作用域(page/request/session/application),而不會識別當前的實例,所以只有存入。
          ????? %>
          ????? <html:link action="/PRC301E1"? name="map">
          ??????? 多參數輸出
          ????? </html:link>

          -----------------------------------------------------------------------------------------

          在struts標簽<html:link>的page屬性指定的URI后面傳遞參數可以有幾種方式:

          1.若明確參數名和參數值則直接在URI后輸出,
          如:<html:link page="/test.do?action=add">add</html:link>

          2.對于參數值不確定的,paramName和paramProperty來輸出,用paramId屬性指定參數名。
          對于paramName指定的對象應該存在于page、request、session、application其中之一。一般來說,是從Action類傳過來的,作為request的屬性之一(requst.setAttribute("name",object))。
          如果paramName指定的對象是action的ActionForm,則無需使用request.setAttribute方法。
          例:<html:link page="/test.do" paramId="userid" paramName="uid">uname</html:link>
          若參數值是一個bean對象的屬性值(比如ActionForm,或者集合中存放的對象)則:
          <html:link page="/test.do" paramId="userid" paramName="user" paramProperty="uid">uname</html:link>

          3.若兩個參數,一個確定一個不確定,則是以上兩種方法的結合,即:
          <html:link page="/test.do?action=modify" paramId="userid" paramName="uid">modify</html:link>

          4.對于多個參數的問題,可以使用一個HashMap集合對象來存放所有的參數名及對應的參數值的方式,paramName屬性值指定為該HashMap集合對象即可。
          舉例:
          <%
          //代碼理想的位置應該是在action中
          //可以在jsp頁面測試
          ? java.util.HashMap pms = new java.util.HashMap();
          ? pms.put("code", "001002");
          ? pms.put("name", "tester");
          ? pms.put("alias", new String[]{"matin","jack"});
          ? request.setAttribute("params", pms);
          %>
          <html:link action="/test.do" name="params" >test</html:link>
          編譯后的結果:<a href="/test.do?code=001002&name=tester&alias=matin&alias=jack">test</a>
          這種方式雖然可以解決傳多參數的問題,但是實現起來也比較麻煩,特別是對記錄集中的數據逐條列出的時候

          5.針對有的網友在<html:link>標簽中嵌入使用jsp腳本(scriptlet)的問題,
          例如:
          <html:link page="/test.do?code=<%=varible%>">add</html:link>,這種寫法是錯誤的,是無法編譯的。
          有的網友認為在struts標簽內是不允許使用jsp腳本的,這種說法也不準確。如果前面的寫法改成:
          <html:link page="<%="/test.do?code="+varible%>">add</html:link>,就可以被執行,但是要注意URL相對路徑的問題。

          雖然在struts標簽中嵌入jsp腳本不是真正意義上的struts應用,但是有時在委曲求全的情況下也只能如此了,除非使用自定義標簽。比如在form表單中可能需要根據具體數據讓某個字段是只讀的,就可以用嵌入jsp腳本來實現:
          <%
          boolean rdonly=false;
          if(2==2) rdonly=true;
          %>
          <html:text property="userid" readonly="<%=rdonly%>" />

          6.另外一種比較變態的方法,既不是真正意義上的struts,也不符合xml規范。那就是在<a>標簽中用<bean:write>標簽輸出參數值。
          如:<a href="test.do?uid=<bean:write name="user" property="userid"/>&name=<bean:write name="user" property="username"/>">test</a>

          posted @ 2006-12-27 14:35 鷺 閱讀(355) | 評論 (0)編輯 收藏

          2006年12月26日

          ? myeclipse+eclipse+tomcat配置
          一、安裝j2sdk1.4,設定環境變量。?
          ???我的安裝目錄是?D:\work\j2sdk?。?所以設定環境變量如下:??
          ???操作:?我的電腦(右鍵)?---->?系統特性---->?高級---->?環境變量:??
          (此處原文有圖片,不懂如何設置的朋友可以產看原文)
          設定環境變量為:
          ???1.?(新建)JAVA_HOME:?D:\work\j2sdk
          ???2.?(新建)CLASSPATH:?.;D:\work\j2sdk\lib\tools.jar?(注意:點號不能省略,表示當前目錄)
          ???3.?編輯PATH的變量值,在后面加上?;%JAVA_HOME%\bin?(注意:要有分號隔開)?

          ???到這里,j2sdk安裝完畢,用命令簡單測試一下:?java?-version??
          二、安裝Tomcat5.0?
          我安裝的是jakarta-tomcat-5.0.28,是安裝版,同樣安裝在d:\work目錄下,便于管理。
          ?
          三、安裝Eclipse3.1?
          1、下載地址:http://www.eclipse.org/downloads/index.php?找到下面的頁面
          直接解壓縮到d:\work目錄就可以用了?? 到這里,?Eclipse3.1?安裝完畢。
          2、漢化,下在漢化包[Eclipse3.1.1和中文語言包,MyEclipse4.0.3].NLpack1-eclipse-SDK-3.1.1a-win32,解壓后把features和plugins這2個目錄拷貝到?Eclipse的相應目錄下。
          一定要先漢化,如果先破解再漢化會出現意想不到的錯誤。
          四、安裝?MyEclipse4.1.1?(MyEclipse不是免費的,所以我們先下載一個試用版,再去網上下載一個注冊機)??
          下載版本:?MyEclipse?Enterprise?Workbench?4.1.1?GA?for?Windows?98/2000/XP?(8/29/2005)?
          ?
          下載完成后,開始安裝:?
          1.?選擇你的eclipse所在目錄(根目錄 如:D:\work\eclipse),其它都點下一步,默認安裝。
          ?
          2.安裝完畢之后,找到myeclipse的安裝目錄
          ?
          3.?將features和plugins這2個目錄復制出來。
          ?
          4. 將第3步復制的features和plugins這2個目錄下的文件,?拷貝到?Eclipse的相應目錄下。
          ?
          解釋一下上面做的原因:?因為myeclipse是eclipse的插件,所以只要把features和plugins這2個目錄的內容拷貝到eclipse的相應目錄,eclipse會自動認出這些插件。?
          到這一步,myeclipse算是安裝完畢?
          ?
          五、破解myeclipse4.1.1?
          1.去google搜索下載一個注冊機。MyEclipse 4.0 以上版本(http://www.aygfsteel.com/Files/oksonic/MyEclipseKeyGen4.X.rar

          2.解開注冊機,可以看到有三個文件.運行KeyGen.exe. 選擇合適的MyEclipse版本隨便輸入一個名字,然后生成注冊碼. 把Name和Key都記錄下來留著一會使用.

          3.運行eclipse.exe,?設定同目錄下的workspace
          ?
          4.這個時候myeclipse插件應該已經被識別出來如果不能識別請在仔細檢查上述步驟.并通過goole解決.
          ?
          5.?點擊?Window?---->?Preferences?---->?Subscription?---->?Enter?Subscription,?輸入注冊碼,破解myeclipse
          ?
          到這里,myeclipse破解完畢。?

          posted @ 2006-12-26 07:36 鷺 閱讀(935) | 評論 (1)編輯 收藏

          我的星座

          白羊座的人令人覺得他開朗而熱情。即使他內心是有那么點害羞,表面上仍可以很自在、大方。當一頭白羊愁眉苦臉時,只會出現在他家里鏡子中。他再傷心,就是不會在別人面前擺出苦臉。好強?可以這么說。誰不好強呢?其實白羊座的人仍會向朋友吐苦水,但真正的眼淚,你是看不到的。

            一群朋友,開開心心的,在陽光下嬉耍,是白羊座最懷念的美好時光。悲郁的人生絕不是白羊座的人所向往的,不幸陷入時,他也會極力設法讓自己不要太相信會就這么過一生,他全心希望有一個新生活。

            愛恨分明不吃回頭草

            白羊座的人愛恨分明,愛就是愛,恨就是恨。不過A型白羊,對“恨”這個字眼沒多大興趣,他是不愛就是不愛而已。在愛情上,白羊是相當干脆的,不喜歡拖泥帶水,屬于行動派,要求立見真章。他們最不能忍受一廂情愿。

            凡是白羊決定不要的東西,絕不會再撿回來,否則他無顏面對自己。不吃回頭草,也是白羊座人好強的證據。由于白羊座對愛情具有童話格,要求純潔、唯一與童稚心的戀情,與舊情人復燃愛曲當然是白羊座不屑的。

            談戀愛時,白羊座的人是不會騙你的,大可放心。但是他的愛意來得快,去得快。除非你有超強的吸引力,一旦一頭白羊陷入不可自拔的情網時,你要抽身,也就很難了。那將會是悲劇的下場。你也得不到好處。

            樂觀乃天性不是不悲觀

            白羊座天性樂觀,但長大后遭遇到的事了,他們也會悲觀到了極點。只不過悲觀歸悲觀,既然不想死,活下去就得樂觀點,日子才會有趣些。因此白羊座的人只不過是不把悲觀當一回事,并不是不悲觀。而他們樂觀的天性極具感染力,你得穩著點,以免誤陷入一塌糊涂的樂觀絕地之中。

            白羊行使俠義的性格,使他能結交許多剖心相見的朋友。但是他對朋友的要求也很高,不少人受不了白羊座對朋友的殷殷期許。自然啦,白羊對情人、對丈夫(或妻子)、對同事,也都有些標準在心中測量。與標準不符時,他便會覺沮喪、食欲不振。現實的人永難成為白羊座人的朋友。

            爆發型的浪漫

            白羊座的人當然是浪漫的,但是是屬于爆發型的浪漫。公羊、母羊皆如此。一點一滴積出來的浪漫,對白羊座來說,強度不夠,只覺累贅、厚重,這種浪漫容易分叉、斷裂。白羊座喜歡在慶典的夜晚,與情人并肩仰望煙火在夜空中爆放出光芒萬丈,而那也正象征著愛情發生的瞬間,浪漫不過了。

            當白羊座處于浪漫的瞬間,幾乎沒有什么事可以挪動他們的感性。浪漫過后他顯然全已清醒,接下來端看那瞬間爆發的浪漫,到底能在他的記憶中存留多久,才能知他到底有多在乎曾經發生過的感動。

            因此,你也可以推論出,工作、事業、婚姻、友情都不在白羊浪漫的范疇中,他對這些反是以細水長流的方式經營。“徒步越過愛琴島是可能的,你只要逐島跳過去就行了。”

            嗨!我在這里

            不必等到風吹草低見牛羊的那一刻,你便會遠遠看到有只羊在拚命蹬踢他強健的小蹄子,在半空中跳躍,向你打招呼:“嗨!我在這。”

            是的,白羊座的人就是這么令人覺得他開朗而熱情。即使他內心是有那么一點害羞,表面上仍可以很自在、大方。當一頭白羊愁眉苦臉時,只會出現在他家鏡子中。他再傷心,就是不會在別人面擺出苦旦臉。好強?可以這么說。誰不好強呢?其實白羊座的人仍會向朋友吐苦水,但真正的眼淚,你是看不到的。

            一群朋友,開開心心的,在陽光下嬉耍,是白羊座最懷念的美好時光。悲郁的人生絕不是一頭白羊所向往的,不幸陷入時,他也會極力設法讓自己不要太相信就這么過一生,他會全心希望有一個新生活。

            正經八百的,會要他的命

            白羊座出現在高貴、華麗的場合中,不會顯得格格不入,但是他自己卻難受得要命,因為他不能自在地蹺二郎腿,不能在高興時放浪形骸。正經八百的,會要他的命。

            一般社會上流行的娛樂,白羊座都能欣然加作,但是他本來就有的獨特娛樂品味也不會放棄。也就是說很愛聽歌劇,但也喜歡到卡拉OK高歌一曲。基本上,白羊座的是很雅、俗共賞的。他們的適應很強,但又隨遇而安。在白羊的心中總是有一個更好的天堂在等著他。

            白羊座的人對于生命力旺盛的人,特別注意。他喜歡被專家領導,不會隨便懷疑,一旦懷疑便打入十八層地獄。而他成為專家時,也不要隨便懷疑他,如果你不能拿出令他心服口服的證據,你將永不能再從他那得到教誨。

            若不能舉足輕重,寧可自動消失

            白羊座的人常因過度自信而沖動行事,又因沖動行事失敗而自毀信心。對白羊座的人來說,三思而后行是比較好的。在一個團體中,白羊座若不能舉足輕重,他寧可自動消失,并且不會以任何借口。消失就消失了,這不是我的王國,他把自己在團體中的角色看得很重,相對地也愿意承擔更多的責任,他不會認為自己可以不勞而獲。一旦勞了還是沒有獲得的時候就絕不戀棧。

            他的自尊心強,你的一句“老實說”會傷他的心許久。如果你問他會不會表演空中飛人,他心中盤算自己應可勝任,便會點頭,答應你一個月后的表演,這一個月中他就會勤加苦練。而對于自己沒有把握的事,白羊座的人是不至于去強出頭的。

            愛情是一生中最大的課題

            白羊是很容易不耐煩的。在戀愛中,你得把那些小把戲收藏起來,他可受不了什么“考驗”之類的事。既然愛他就應該信任他。不管公羊、母羊,他們對愛情都是十分認真的。對他們來說,愛情有兩種,一種是真的,一種是假的。假情愛情,極易發生在沖動而善感的白羊座身上,但很快會結束,并且會像是從未發生過。真正的愛情,是白羊座一生中最大的課題,他總覺得這個課題怎么寫也寫不完整。

            友情與情是白羊座不可或缺的兩大支柱。當愛情沒著落時,他們可靠著這兩大支柱中的任一項,發展他的事業。即使他十七歲時就有了結婚的對象,但到了七十歲若未結婚,他也仍在心中保有一個結婚對象,這是他的樂天知命所使然。

            相信小精靈的孩子

            僅管白羊座的人長得人高馬大,他仍是個孩子,他一直保有天真的一面,即使長大了,他還是相信世界上有小精靈的存在。有時白羊座的人相當幼稚,可是他絕不是不聰明,他的反應可快得很呢!

            他有帶頭當第一的強烈欲望,做第二免談。所以他做起事來動作很快,甚少優柔寡斷。他非常自信,深信自己處理事務的能力無人可及。他也從不向命運低頭,僅管挫折一次又一次的出現。他信任所有的人,很少會去懷疑別人是否會對他不利,而他的勇敢也使他能不斷地站在最前面。

            與白羊座的人相處時,你必須注意一些重要的關鍵,他是個喜歡爭先的人,這是所有白羊座的天性,所以有時你必須要有心理準備。他說話或做事都相當直接,很少會跟你拐彎抹角,他也相當誠實,只要一說謊就很容易被人察覺。

            他是個不擅處理細節的人,所以,如果你想請他處理些較細微的工作的話,倒不如自己做還來的恰當些。

          ?

          ????? 偶然機會看到這樣一個帖子,對著我自己來一條條比較,發現竟然那么的相似,那么的準確!其實我一直都不是很相信命運的,我媽曾經給我算過命,說我這幾年運道不是很好,我都沒有相信,但是最近發生在我身上的一些事,好像不得不使我有那么一點相信它的存在了。最后祝愿所有白羊座的人們都開心!愉快!

          posted @ 2006-12-26 07:33 鷺 閱讀(222) | 評論 (0)編輯 收藏

          僅列出標題  
          主站蜘蛛池模板: 淮阳县| 靖远县| 石渠县| 望江县| 潜江市| 庆元县| 辰溪县| 丰原市| 长岭县| 云浮市| 寻甸| 讷河市| 遂昌县| 平远县| 民勤县| 收藏| 新平| 凤庆县| 辰溪县| 新安县| 泰安市| 建德市| 时尚| 桃源县| 苍山县| 通州区| 富宁县| 潜山县| 瓮安县| 抚远县| 镇康县| 柘荣县| 沐川县| 黄骅市| 乐山市| 蒲城县| 张家川| 博客| 长岛县| 宜黄县| 渑池县|