Struts 1.x 標籤庫詳解

Struts 1.x 中的html標籤庫 2 u+ @) X9 q6 _; m) o2 A4 d
生成html元素的標籤
             1)<html:link>至關於<a href>標籤
                   A)href:要連接的目的地。好比:<html:link  href="a.jsp">進入a.jsp</html:link>
                   B)forward:要連接到全局轉發<html:link forward="msg" >this link</html:link> 4 ?5 d, |& F7 k& R
                      首先要在struts-config.xml中配置全局轉發 7 J& [% z: Q0 ?
                       <global-forwards>
                            <forward name="msg" path="/msg.jsp"/>
                       </global-forwards> 5 m& A( H$ p% [  {5 |
                   C)值得注意的是超鏈接也能夠鏈接action。此時屬於get提交,所以不用ActionForm. " H; B' @3 E& s4 q, u
                     好比:
                       <html:link href="SumAction.do?n=4" >this link</html:link>
                       舉例:經過本頁面進行處理。以後把結果返回本頁面,而不是其它的頁面
                       建立一個Action,可是不須要建立ActionForm,而後配置此Action的forward 6 Z+ F! A( r& f) p  U
                       讓此Action處理完結果以後,跳轉回本身 6 u1 V5 z/ A$ L$ Q6 X9 n- \* J
                   D)該標籤最具備特點是能夠把四種範圍內(request,page,session.applicaion)內的 3 K1 w% N. k' B) C
                     變量或javabean的值作爲參數進行傳遞,  好比: 8 k+ A8 K" z3 ?! ?
                     pageContext.setAttribute("uid","chen");                     
                    <html:link page="msg.jsp" paramId="uid" paramName="uid">this pram link</html:link> / L" R; Y+ K( O  J7 z
                      7 \5 T, S* m$ K6 w% a7 S9 t, J
: x" J: {) k# D- \% U  J& C9 @
                     paramId:指定get參數名 % W& K3 O$ X$ `( n
                     paramName:指定參數的值
                     <jsp:useBean id="sum" class="ht.NetBook.sumBean" scope="page"/>
                     <jsp:setProperty name="sum" property="n1" value="10"/>    8 h& z* ?; k. \
                     <html:link href="msg.jsp" paramId="n1" paramName="sum" paramProperty="n1"> ( ?! h4 J' E' g7 J; A" l6 ]

                   paramName:指定javaBean的名字
                   paramProperty:指定javaBean屬性,該鏈接會自動的把javaBean的屬性取出來作爲get的提交值 8 r" I5 X5 }! h9 A9 l
              
                   舉例:經過數據庫取出員工的基本資料,而後顯示,注意放入刪除超鏈接 3 j$ q2 q; q4 w# s0 _2 f
                   思路:經過javaBean結合超鏈接進行 2 B5 W% q4 ?! ?. `- N% V4 c: S
- H4 N9 b. i7 @; y$ w
) n0 k; B- u% T  q% s! p$ E1 y
( L* I7 }+ L  S" N, Q1 a
             2)<html:img src="ab.jgp"/>圖像標籤。至關於<img>標籤 & Z, y" R2 F0 [+ d' e
                                  ; c; I0 I6 j/ A
) H8 A2 C' P0 D/ h; t9 }* a& m
    生成html表單元素的標籤  
           1)<html:form action="Action.do"> ; o4 I2 F% d, c4 c8 `
                 A:用於生成表單 : n. D* v6 P- {3 S$ G
                 B:action用來指定跳轉到struts-config.xml中配置的Action  
                   對於<html:form>的說明:            
                 C:struts表單元素的標籤必定要嵌套在<html:form>標籤裏面,不然會出現錯誤
                         好比:
                           <form id="frm" action="testAction.do"> //這是html表單 & R) |3 |/ ^# @! f1 x, ?7 F
                               單價:<html:text property="price"/>//而這是struts表單元素   
                            </form> 9 c" H' z! l+ V  |# ~( Q1 E
! k) _5 e3 [; R; c
                 D:一個Action能夠沒有對應的ActionForm,可是<html:form action>對應的Action必定要

                     有ActionForm,不然會出現錯誤   好比: ( V3 L8 ^# N6 x8 H( P+ r. H
                        <html:form  action="testAction.do">
       2 ], V5 f, Z8 N  F3 {9 O0 ?% f
                         </html:form> 9 K7 S1 W) r3 j7 G: B
                    而struts-config.xml的Action配置以下:
                     <action  path="/testAction" type="ht.NetBook.struts.Action.testAction" />
                      即表示testAction沒有與之對應的ActionFrom,運行時會出現如下錯誤: + ^% e3 G; ]0 w5 w) y. Q
                          Cannot retrieve definition for form bean null on action testAction.do
                       若是form Bean爲空,則不能編譯
                     , {7 m0 P2 E! Q1 R
                E:<html:form>不須要加id或name屬性,它通過IE解釋以後其名字自動變成與之對應的
                     ActionForm的名字,這也就是爲何若是不爲Action指定ActionForm會出錯的緣由 * h9 A: q* g; `! R# S' U
0 K' ]% |" Z1 p/ _1 Z
               F:結論:若是要使用struts表單元素必需要放在<html:form>中,而此 $ V8 X$ G0 ^+ |+ @
                     <html:form>對應的Action必定要有ActionForm才能夠正常運行,
                     若是不使用struts表單元素,也可使用普通的html標籤,一樣
                     能夠與struts結合,可是struts裏面的有些標籤更加智能
                                       , T9 ^' z3 S# D6 a  R5 u
* k9 L. z7 v" C7 I9 \
             3)<html:button property="register"/>生成普通的按鈕
             4)<html:submit>提交</html:submit>生成提交按鈕
             5)<html:reset>重置</html:reset>生成重置按鈕   W: J  B* I, ^) P. a6 _5 T8 p
             6)<html:text property="uid"/>用於生成文本框 ; n% L, ^( [7 q
                A:prperty中的值必定要與ActionForm中的屬性值保持一致
                B:struts裏面的文本框在表單提交之後值會依然保留這與通常的html標籤不同 4 y: B$ Z# l$ w$ i# `, c- r  Z4 d
                C:可使用<html:text property="uid" value="值"/>的方法賦值給文本框    ) k) f% r( Z" w6 z$ M
' Q% E1 i7 T' L! e

5 u$ A3 p# S0 `+ K* C
2 Y3 q) G$ E" y5 \
             7)<html:reset>復位</html:reset>與普通html的重置按鈕同樣 * W: l2 @9 h+ L! d, _' T( O, v
             8)<html:submit>提交</html:submit>與普通的html的提交按鈕一致

             9)<html:checkbox>至關於html的checkbox
                格式:<html:checkbox property="discount"/>
                      其中的property中的屬性名必定要與ActionForm中類型爲布爾類型的屬性關聯    好比:
                         public class discountActionForm extends ActionForm {
                                private boolean discount=true;      //此處將會使checkbox自動勾選 4 B3 g& M. w* _  V
                          } 4 v& y% D$ ?8 B
                     則可使用<html:checkbox property="discount"/>與該discount的關聯 9 t% O/ K. O3 ?, W2 {; ]2 j
                   說明:
                    1)該標籤必定要配合普通隱藏域標籤纔可以正常使用,不然只有勾選一次,之後不論是否勾選其值都是true - e7 T, ]. ?, ?' ~  x" C, `# H* t6 P
                       <html:checkbox property="discount"/> 4 H5 B5 ~0 F) P' M8 ?
                       <input type="hidden" name="discount" value="flase"> ) u; ?9 ^. k* s- H! B
                    2)能夠Action中的Excecute方法裏面。去檢查discount的值
                        discountActionForm frm=(discountActionForm)form;
                        if (frm.getDiscount()) {作一些事件}
                   3)該標籤默認狀況是在頁面初始化時不會自動選中,能夠設置ActionForm裏面的屬性默認
                     值爲true.好比:
                     舉例:讓用戶輸入商品單價與商品數量,實付款,用是否打折來顯示應付款與找零
9 X, O& N  p4 L5 [3 `


              10)<html:multibox/>產生複選框
1 @. a; N2 r3 h$ r! x
                    與<html:checkbox>的區別在於,它能夠與ActionForm中數組屬性對應    好比:
                     <html:multibox property="love" value="唱歌"/>唱歌<br>
                    <html:multibox property="love" value="跳舞"/>跳舞<br> # _2 j. w1 f, W% u! K  n; I& Y' n" G* k, q
                    <html:multibox property="love" value="足球"/>足球<br>
                    <html:multibox property="love" value="音樂"/>音樂<br>
                  說明:
                     1)其中每一個mulitbox的property值必須同樣,才能夠作爲一個複選框組。
                     2)property="love"中的love必須是在ActionForm中定義的數組 # a4 z0 Y6 M" k6 Z9 h; [; n& m( M
                        private String love[]; 4 G% y7 m) z! L; I" j0 n0 m4 D
                        public String[] getLove() {
                               return love; , i' K$ S& k8 z7 H/ o
                        }
                        public void setLove(String[] love) {
                               this.love = love;
                      } % ]8 [8 }! m) m0 @6 B- E
                    3)當用戶選中某個複選框後,會把該複選框的值存入ActionForm中的love數組中
                    4)與<html:checkbox>同樣,也存在一樣的缺點,就是若是選中以後取消勾選此時
                      仍是會繼續勾選。解決的方案是增長一個隱藏域 & i" o9 u- @  K0 J
                      <html:multibox property="love" value="唱歌"/>唱歌<br>
                      <html:multibox property="love" value="跳舞"/>跳舞<br> 3 I, v1 A8 w7 O- P- [4 x
                      <html:multibox property="love" value="足球"/>足球<br> . f% |2 E4 l% j6 J
                      <html:multibox property="love" value="音樂"/>音樂<br>
                      <input type="hidden" name="love"/>//注意不要value=flae
                    5)加了隱藏域以後,struts會把隱藏域的值也加入到love數組中,因此在使用時,
                      應該去掉。for(int i=0;i<frm.getLove().length-1;i++) //長度減1去掉
                     舉例: + i9 J3 ^, H# D" x! x2 |$ A4 I7 K
                         1)愛好,把人的愛好放入數據庫中保存
                         2)各模塊之間的權限管理 0 `. c+ d' z8 p& }* Y: y  y
! E3 O, B7 D9 Z% ?% m% _
5 Q9 f* k5 n- t' T$ z/ v7 N
                 11)<html:radio>產生一組單選框
                      <html:radio property="degree" value="1">高中</html:radio><br>
                      <html:radio property="degree" value="2">中專</html:radio><br>   a7 s& r$ G- [$ J/ R2 P  u
                      <html:radio property="degree" value="3">大學</html:radio><br> " s* w3 [' i5 I. z; m/ v4 c
                      <html:radio property="degree" value="4">小學</html:radio><br>
                   說明: % Y. v% h8 O: @/ a0 j
                      1)property的值必須與ActionForm中的某個屬性關聯,之後選擇了那個單選框
                          Struts就會與之對應的值賦給ActionForm的關聯的屬性 + Z# x5 Y( O5 O" e
                      2)單選框不須要隱藏域,就能夠正常的工做 . @  C5 Q3 J8 E% O$ H5 f
                      3)如何要設置默認的選項,能夠把ActionForm中關聯的屬性值設置成單選框中
                        與之對應的值
                            public class discountActionForm { $ p' b- y3 B; E3 d! o* L& F
                                      private String degree="1";//設置默認值。 ' x3 l5 ~8 y! _3 Q; }
                             } 7 b$ E  E5 F9 ^% Q" E

                        這樣"高中"就默認選中了。由於ActionForm中的degree關聯的值與"高中"單選框的值相同 * j( [% A% u5 i7 v* j5 U: R
                        舉例: 5 a( h4 }2 f$ _& p+ h
                           1)愛好 : E# R" [( K* l3 ~! y- ?3 S0 F; Z
                           2)投票---要求從數據庫讀取投票項,進行投票
  1. 12) <html:select property="color">下拉列表框
  2.                       A:一個<html:select>會包括多個<html:option>
  3.                       B:property屬性值與ActionForm中對應的屬性關聯。
  4.                            public class ActionForm extends ActionForm {
  5.                                private String color;
  6.                                get...
  7.                                set...
  8.                            }
  9.                       C:<html:option>中有一個顯示值與實際值
  10.                            <html:select property="color">
  11.                            <html:option value="yellow">黃色</html:option>
  12.                            <html:option value="green">綠色</html:option>
  13.                            <html:option value="blue">藍色</html:option>
  14.                            </html:select>
  15.                       D:<html:select>不用設置默認值,它會自動選中第一項
  16.                       D:該類型的下拉列表通常適合於不與數據庫發生交互的狀況
  17.                      
  18.                  13)<html:options collection>該options很是適合於與數據庫進行交互
  19.                       好比:<html:options collection="save" labelProperty="voteItem" property="id"/>
複製代碼
A:<html ptions>標籤必須放在<html:select>裏面 5 ^4 Z/ S% n9 @" R$ G5 I  ?
                    B:collection表示Javabean的一個集合,該集合必定要放在四個範圍裏面 7 _/ u; _$ F4 V6 T+ U
                    C:labelProperty表示顯示的值
                    D:property選中以後的值 6 ]/ ~# h) V; {# h( Q
                   好比:一個jsp頁面 % q; c1 y* Z/ u  I+ [" R4 S
                     <%
                          java.util.List save=votes.getAllvote();//返回投票的javabean的集合   I4 X5 L- ~8 G- M9 _& S% X) t
                          request.setAttribute("save",save);
                      %>
" B( ~, Z" e+ E! L! p
, B; \: x$ h. [9 z6 Y0 H* t
                      <html:select property="id"> //此處的id必定要與ActionForm中的屬性對應
                            <html ptions collection="save" labelProperty="voteItem" property="id"/>   : M# L' O3 D/ q
                      </html:select>                               //此處不能用${save}
                      & O. t  F2 o; T# N) A; J+ x! F
                     ActionForm的定義            & C0 t. _% R0 p) \7 d  v
                     public class voteActionForm extends ActionForm { " V3 y; Q* I, |' g
                         private String id;
                          get...
                          set...
                      }
                      JavaBean(描述類vote)的定義 8 f* M$ _, Q3 G9 t  c
                       public class vote {
                          private String id;
                          private String voteItem; 4 x$ e2 t% P& X2 _; h
                                 get... 6 k# I, S: U/ ?2 B4 A
                                 set... $ q$ C1 A% i' R( N
                          }
                         9 i0 N% p; s; B% b" I
                       管理類(votes)的定義 ' U( S( D# y; D; b0 p( x; M
                         pulbic class votes{   p/ U, b  s- Q0 f% Q
                              public static List getAllvote() { 2 p" u' z: j, S7 }
                                    vote newInstance=new vote();
                                    newInstance.setId(rs.getInt(1));
                                    newInstance.setVoteItem(rs.getString(2)); + g5 y- b6 b2 F' M) G9 e  f, N
                                    list.add(newInstance); / W' q& f& x. K) c( _( t
                                      return list;
                               } ) y. Y6 j% E+ R+ \0 ~0 |
                        } 4 ~( s# @! q' T* v; Q
                      舉例: 8 |! r; @, x* w+ ^. l) a/ t) L
                       1)用<html:select>結合<html ptions>來重作投車票項目 3 l6 m) n1 X! d% i0 H3 E
                       2)讓用戶選擇部門編號,查詢出對應的職工信息。要求部門用下拉框實現 7 H+ h8 C( b" N, p
; ~2 f" F+ |; G

                 14)<html:file property="file">文件上傳組件 0 b/ e& F& Q2 I+ s
                     A:<html:file>必須嵌套在<html:form>標籤中
                     B:<html:form>標籤的method必須爲post提交 3 U, X) Z8 e/ r8 t+ ?; p8 S
                     C:<html:form>中的enctype必須爲multipart/form-data method="post"
                     D:<html:file>標籤必須設置property屬性。這個屬性和ActionForm中的 ; f. m: A/ k+ D6 w4 o  V
                       的FormFile類型的屬性對應 1 \* W' j2 [) X( G. z
                     好比:
              ====================ActionForm========================
                       private private org.apache.struts.upload.FormFile file;
                       public get...
                       public set.... - o' E+ w8 J1 f, O0 {1 ?
             ==========================jsp頁面===========================
                     
             <html:form action="SumAction.do" method="post" enctype="multipart/form-data" > ; B/ s9 z2 r! X3 [
             <html:file property="file"/>注意這裏面的file與ActionForm中的file屬性對應 8 L9 n$ s3 x/ y# q
             <html:submit>提交</html:submit>
             </html:form>                   4 Q% B4 [. n1 b1 w+ k7 ?$ R! Y& s
           ============================Action=========================== / y* _; `- f: L5 m# S# S/ p/ i
                    uploadActionForm frm=(uploadActionForm)from; 3 z! X- l$ P" `3 p; U
                    FormFile file=frm.getFile();//獲得file對像 % ~- T% \. E0 B- B7 F
                    String fileName=file.getFileName();//獲得要上傳的文件名 - ^) U9 G8 b# t( {- c6 Z
                    String dir=servlet.getServletContext().getRealPath("upload"); * U# _1 l+ r( h
                                                    //獲得文件的路徑,這裏面統一上傳到upload文件夾下面(WebRoot\upload) . ?" ?+ _9 T. \0 t2 {- {
                    String serverPath=dir+"\\"+fileName;                  //服務器的實際文件路徑   y0 E: i' I: s# T% t
                    InputStream inputStream=file.getInputStream();//輸入流
                    OutputStream outputStream=new FileOutputStream(serverPath);//輸出流
                    int readBinary=0;
                    byte buffer[]=new byte[8192];//緩衝區爲1024*8也就是8字節 0 F& W7 s: L1 M7 J/ v
                    while((readBinary=inputStream.read(buffer, 0, 8192))!=-1) {      . [" ~! e% _$ b, @

                                                                             //從inputStream中每次讀取8字節的的數據到byte數據組中 $ r, I6 p+ w1 Y+ D
                              outputStream.write(buffer, 0, readBinary);         //寫入到outputStream中 " O' K' V9 C3 s& R" [7 S
                    }
                    outputStream.close(); $ W2 l$ }0 ^9 b% @+ `0 V
                    inputStream.close(); $ J& T/ r4 |- g: P" ^$ N
           
         ===========================inputStream.read的介紹================== / q# D7 P" \+ V
               inputStream.read(byte b[],int off,int len)
               讀取len個字節,放置到下標off開始的字節數組b中,返回實際讀取的字節的數量 - z% Y% u. G8 [+ D  P+ }! R                通常off都是零,由於是從數組的第一個位置開始填充
相關文章
相關標籤/搜索