Struts1 tag

標簽庫:
???? a) struts框架下的struts標簽庫
???? b) sun jstl c標簽庫
???

??? 作用: 1) jsp 和 java代碼分離 -- 自定義標簽
????????????? 用標簽來替代Java的代碼
????????? 2) struts標簽 能夠和struts-config.xml
????????????? actionForm等特有的對象進行交互

struts標簽庫
?? html標簽 --- 替代基本的html元素

?? bean標簽 --- 訪問JavaBean

?? logic標簽 --- for
???????????????? if判斷? 程序結構的標簽化

html標簽
?1.html標簽
? <% taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
? 基本html標記的替代標簽

a)基本的html元素標簽 (選擇使用)
?<html:html> *****?????
????? <html:html locale="true"> 對應 <html lang="zh-CN">
?<html:base> *****????
????? <html:base/>? 對應 <base href="http://localhost:8080/aa.jsp">
?????????????????????????????????????? 當前頁面的地址
?<html:img> *******
???? <html:img page="images/zhangying.gif"/>
????????? 對應
???? <img src="images/zhangying.gif">

??? 傳參數
??? <html:img page="jspimage.jsp" paramId="id" paramName="1"/>
????? 對應
??? <img src="jspimage.jsp?id=1"/>????????
?

**** <html:link> 3個屬性page href forward
?? 代替Html中超鏈接標記
??????? <a href="sueccess.jsp">跳轉</a>??
????
???? <html:link page="logout.jsp"> 相對路徑page
??????? 注銷
???? </html:link>
??????? 對應
????? <a href="logout.jsp">注銷</a>


???? <html:link href="http://www.sohu.com"> 絕對路徑href
???????? sohu網站
???? </html:link>
?????? 對應
???? <a href="http://www.sohu.com">sohu網站</a>


?struts-config.xml中的global-forwards
??? forward

???? <html:link forward="success">? 對應全局轉發
?????????? 成功頁面
???? </html:link>?
?????? 對應
???? <a href="/success.jsp">成功頁面</a>

?傳參數:

?? paramId 指定傳參數的名字 id
?? paramName 指定參數的值 1

??? <html:link page="/deleteemp.do" paramId="id" paramName="1">
????? 刪除
??? </html:link>

??? 對應
??? <a href="/deleteemp.do?id=1">刪除</a>


<html:rewrite>? 輸出對應的URI 的字符串
??????????????????? 不產生超鏈接?
?<html:rewrite page="/deleteemp.do" paramId="id" paramName="1">
??? 對應
??? /deleteemp.do?id=1

b)基本表單標簽 ->form表單? ******
? <html:form>
? <html:text>
? <html:hidden>
? <html:reset>
? <html:submit>
? <html:password>
? <html:checkbox>
? <html:radio>
? <html:file>? ----- 文件類型
? <html:select>
? <html:option>
????? 對應基本的表單元素? property="" value=""

?? <input type="text" name="user" value="">
對應于
? <html:text property="user" value=""/>

<input type="checkbox" name="ah" value="1">體育
<input type="checkbox" name="ah" value="2">游泳
對應于
<html:checkbox property="ah" value="1">體育</html:checkbox>
<html:checkbox property="ah" value="2">游泳</html:checkbox>

? <html:file> ---文件的上傳的標簽
??? common-fileupload-1.0.jar
?? 實現文件的上傳
?? actionForm中? FormFile的類型 代表file文件

?用處: <html:file/>? 文件上傳得
??????? <html:link/>? 頁面跳轉的


c)錯誤和正確信息標簽??? *******
? jdk的bin中 native2ascii.exe
???? 編碼方式變為Unicode方式
? native2ascii -encoding gb2312 applicationResources.properties
ApplicationResources_zh_CN.properties


? <html:errors/>
??? 輸出所有actionError的內容

? <html:errors property="uname"/>
??? 輸出key=uname對應的內容

?

2.bean標簽?? 訪問變量的屬性或輸出值
???????????? 訪問JavaBean

? a)訪問http請求信息和jsp隱式對象
**???? <bean:cookie> cookie訪問
?????? <bean:cookie id="mycookie" name="loginname" value="123"/>
?????????? id -- 自己設置Cookie變量的名字
?????????? name -- Cookie對象的名字
?????????? value -- 默認值
?

???????? <bean:write name="mycookie" property="value"/>
????????? 取出值
???????? <bean:write name="mycookie" property="name"/>
????????? 取出名字
?
? Cookie c = new Cookie("loginname","northwind");????????
???? c.getValue()
???? c.getName()

?????????


***???? <bean:parameter>訪問請求的參數request
????? <bean:parameter id="arg1" name="username" value="north"/>
?????????? <bean:write name="arg1"/>
????? 對應的Java代碼
??????? request.getParameter("username");


****? <bean:page> 訪問jsp的隱式對象---屬性
????? session
???????? getId() -> id
???????? getCreationTime()? -> creationTime
????? application
????? request
????? response
? 所有對象的get方法能訪問到的屬性 都可以被這個標簽訪問
??? 屬性的第一個字母變成小寫后都可以訪問

?????? <bean:page id="this_session" property="session"/>
????? <bean:write name="this_session" property="creationTime"/>
???????????

?? b)訪問資源
***????? <bean:message> 訪問applicationResources中的消息
???????? <bean:message key="hello.user"/> 輸出key的值

????? <bean:include> 包含資源到一個變量中

? 動作 <jsp:include page="testpage1.jsp"/>
????? 頁面運行結果包含進來
???
? 等價于下面2句話
???????? <bean:include id="tp1" page="/testpage1.jsp"/>
???????? <bean:write name="tp1"/> 輸出變量的內容
????????????????????????????????? 輸出的是頁面的內容?

?? c) 定義和輸出JavaBean
?*****? <bean:define> 定義一個變量
???????? <bean:define id="aa" value="Hello"/>
??????????? <bean:write name="aa"/>? -> Hello


???????? <bean:define id="bb" name="empbean" property="ename"/>
? JavaBean:empbean
? 屬性ename
?? 變量? String bb = empbean.getEname();

?????????? <bean:write name="bb"/> 得到empbean中屬性ename的值


?***???? <bean:write> 顯示JavaBean及其屬性或變量的內容
???????? <bean:write name="" property="" scope=""/>
????????????? name=某個范圍中的屬性的名字 (對象)
????????????? property=JavaBean中的屬性
????????????? scope=訪問對象的范圍

??????

3.logic標簽
?a)if else
??????? if a=b then 等于
??????????????????? 不等于
??????????????????? 大于
??????????????????? 小于
?字符串
??????????????????? 匹配
??????????????????? 不匹配
??????????????????? 空值
??????????????????? 非空值

?b)循環
????? for(int i=0;i<vect.size();i++){
????? }????????????????
???? 對集合的遍歷如何做??


a)
?存在性
? <logic:present/> 是否存在某種變量
????? cookie="cookie名字"
????? header="request中的header"
????? parameter="參數"
?????
????? name="變量或JavaBean" property=""
????? scope="request/session/application"
??? 如果存在 就輸出標簽體的內容

? 相反的標簽
? <logic:notpresent/>
?
?是否為空
?? 空 - ""或null
?? <logic:empty name="變量或JavaBean" property="">
?? </logic:empty>

?是否相等
?? <logic:equal/>
?大于? >? <logic:greaterThan/>
????? >=? <logic:greaterEqual/>
?小于? <? <logic:lessThan/>
?????? <= <logic:lessEqual/>
?
?匹配?
?? <logic:match/>
?? <logic:nomatch/>?
???? location 表示的是位置
??????? 從開始匹配 start
??????? 從結束匹配 end

循環
??? <logic:iterate>

?????? <%
????????? Vector v = new Vector();
????????? v.add("1");
????????? v.add("2");
????????? v.add("3");
????????? v.add("4");
????????? request.setAttribute("number",v);
?????? %>?
?? id定義一個變量
?? name定義變量的內容
??????
?????? <logic:iterate id="ele" name="number">
?????????? <bean:write name="ele"/>
??????? </logic:iterate>
?對集合中所有元素的循環訪問


?indexId 定義循環計數器變量 i
?offset? 開始元素的位置
?length? 要輸出元素的個數

??????? <logic:iterate id="ele" indexId="index" name="number" offset="1" length="2">
?????????? <bean:write name="index"/>.<bean:write name="ele"/><br>
???????? </logic:iterate>


? c) logic轉發和重定向

??? <logic:forward name="index"/> 對應global-forwards
?????????? 轉發到index
? <jsp:forward page="index"/>


???? <logic:redirect page="aa.jsp"/>
?????????? 重定向到aa.jsp
???? response.sendRedirect("aa.jsp")?????
????
struts中文亂碼問題的解決
?<1>編碼轉換函數
?<2>過濾器



Action和jsp的開發其實就是對Struts標簽的運用.掌握標簽的熟練程度決定了開發效率.初學者往往對某個數據表示或數據獲取,束手無策.一個簡單的問題浪費一兩天時間也就不足為怪了.導致整個開發進度延后.外面的struts書籍介紹標簽和數據傳輸原理都比較簡單,下面我對標簽技術和數據傳輸原理,進行全方位多角度的剖析.希望對各位有所幫助.以此為模版,將大大提高開發效率.以sample為機能名稱.
D(j Jtw/c&J①畫面上有一text框,顯現內容為某一數據表中的某一字段.那我們該如何設置和得到此數據呢?JAVA中文站社區門戶D0FYJF
SampleJsp:JAVA中文站社區門戶U!QS2U&s0E0hVT]3]
? < html:text name = "sampleForm" property="name" />
{D%],L&N c)K1Y oSampleForm.java: // form文件名必須和jsp中標簽的name對應JAVA中文站社區門戶j+b&YB-k6gn.},m!NX
? String name; // 必須和jsp中該項目的property一樣
'hu tXL4qs Z? public String getName() { return name; }
+Mg*i9[p4lj z"L/L$d? public void setName(String name) { this.name = name;}
{;b L;ZY3_E)WY變量和方法名,不可以順意.變量abcd,那方法名就是setAbcd和getAbcd.注意大小寫.JAVA中文站社區門戶Ue TEd
jsp中的項目必然全部在form里面有所表示,當然反過來,form里的項目在jsp中不一定全部表示(可能有輔助動作的對象或驗證)JAVA中文站社區門戶 zGr,kJ
SampleAction.java JAVA中文站社區門戶d%Sx"ph N8xg0B0W
? public ActionForward start(ActionMapping mapping,
S9x @.}6^#vW? ActionForm argForm, HttpServletRequest req, HttpServletResponse res)JAVA中文站社區門戶.M']ftn:Qn0v:Z:?
? throws Exception {JAVA中文站社區門戶&kPF5f)R$K_M&p
??????? SampleForm form = (SampleForm) argForm;JAVA中文站社區門戶 VS| }2u x9P z5F
??????? String name = ………………other codes for get name from dbJAVA中文站社區門戶N1X8?-M0@B)BF
??????? // set name
3@F+{-S/C-~}??????? form.setName(name);JAVA中文站社區門戶$l(l(K/Z7?9c\5D%Um
??????? // now text will show the name
Uop3fz0zqof? }JAVA中文站社區門戶As a1I7r)u,y;a%H
public ActionForward save(ActionMapping mapping,JAVA中文站社區門戶f X?&m7H4i%n
? ActionForm argForm, HttpServletRequest req, HttpServletResponse res)
#{ SEv+Zhq??????? throws Exception {JAVA中文站社區門戶 AQ O rH*L
??????? SampleForm form = (SampleForm) argForm;
;d2P8rvl1f2`Z2g;c??????? // get nameJAVA中文站社區門戶YB#L,~*?sW Y
??????? String name = form.getName();
S c2G c,DB u$j Po%mf??????? ………………other codes for save nameJAVA中文站社區門戶+JyI7EN'P\%x
? }JAVA中文站社區門戶8W9NSD'j
jsp和form對應,action操作form,form其實起了傳輸數據的作用.這就是struts標簽的核心原理.得到數據和設置數據沒問題了,剩下的工作也就得心應手了. JAVA中文站社區門戶E@+h'U5J xt

②再看一個處理標簽的方法.畫面上是一個明細一覽表示(表).表示的是數據表user的相關數據(id,name).
$~dJBY `AZSampleJsp:
R$k)?Hy/L? < logic:present name="sampleForm" property="userList" >JAVA中文站社區門戶'fz9A/O d
??? < logic:iterate id="user" name=" sampleForm " property="userList">JAVA中文站社區門戶%kl@5K,d$e B[~)^
????? < tr>
2h t { X:|3UF*Y??????? < td>< bean:write name="user" property="id" />< /td>JAVA中文站社區門戶Y k8k8A Z)} b0cz
??????? < td>< bean:write name="user" property="name" />< /td>JAVA中文站社區門戶6w G6|bM
????? < /tr>JAVA中文站社區門戶F4l N!O8RY DVL
??? < /logic:iterate>
j}K%FqP:[FH? < /logic:present>

C@ U`9l.np"Y:m JAVA中文站社區門戶;REv(zGUpS#JF,o}

logic:present是邏輯判斷,sampleForm中userList為空(無數據或null),下面的東東不顯示.JAVA中文站社區門戶b"V1M@%~Nf
logic:iterate是邏輯循環,userList有幾條數據,就循環幾次.

P^`a;FUM!o

:u6Ki#BvTf< bean:write name="user" property="id" />是lable標簽,顯示user這個對象(entity)的id屬性.或者說顯示數據表user中的一條記錄中的id這個列.JAVA中文站社區門戶7[3QE CC8Jx(l^
User.java(就是entity,因為和業務密切,高達不開發,切記切記不可順意修改.遇到設計有問題,QA日本)JAVA中文站社區門戶!ziw i H%{3M!~g
??? String id;JAVA中文站社區門戶-M:L"N2Q'|3u^ L
??? public String getId() { return id; }JAVA中文站社區門戶+e*Aa| \"p9{
??? public void setId(String id) { this.id = id; }
qvf3OI??? String name;JAVA中文站社區門戶Qk'CT)P!j
??? public String getName () { return name; }JAVA中文站社區門戶i _ o'^ h+}z
??? public void setName (String name) { this.name = name; }
9DC w*v f(?看到這,是否覺得面熟啊,好象和FORM一樣,但有點不一樣,不一樣在哪里,看下去后,自己感悟吧.JAVA中文站社區門戶Y4v ZYg
SampleForm.java: JAVA中文站社區門戶E y)B?x X
??? List userList;JAVA中文站社區門戶U e#ft'y(B3M
??? public List getUserList () { return userList; }
9BMO aS&B`??? public void setUserList (List userList) { this.userList = userList; }
Ou.I Ve[Z)fform只要這些,那你會問,id和name,struts如何能得到呢?你不是說過jsp必須和form一樣對應嗎?不錯,一一對應是肯定的. UserList信息已經包含了一切,還需要定義id和name嗎?至于struts如何得到數據,那就看下面的action是如何處理的吧.JAVA中文站社區門戶6_a.o)x b"q8z"x)h
SampleAction.java
7Ab^"t)N/xl-Tpublic ActionForward start(ActionMapping mapping,JAVA中文站社區門戶u^+H{|
? ActionForm argForm, HttpServletRequest req, HttpServletResponse res)JAVA中文站社區門戶z/\+Y7[&I }
??????? throws Exception {JAVA中文站社區門戶3w"Ty z4Rpr"F
??????? SampleForm form = (SampleForm) argForm;
z`7~ F oS*j o%O??????? ArrayList userList = new ArrayList();
MdzP;P&SfZMG??????? User user = new User();
P U`p"iN`c7^p$I??????? user.setId(1);JAVA中文站社區門戶7u[t,_~ QO2z
??????? user.setName(“name1”);
p6G5drI,}y??????? userList.add(user);JAVA中文站社區門戶Z(J:ww7U

JAVA中文站社區門戶a ENe~{

??????? User user = new User();
Kq2k5yQ9w!D7YS|??????? user.setId(2);JAVA中文站社區門戶#H/Dja|
??????? user.setName(“name2”);
P%F%w Cz`NV X??????? userList.add(user);JAVA中文站社區門戶8T\J'|%f%C
??????? JAVA中文站社區門戶`0r5O-kfs`t
??????? // set userListJAVA中文站社區門戶8`Ip Q"};No]k
??????? form.setUserList(userList);
btlJ;zUf??????? // now table will showJAVA中文站社區門戶5~!w#M t{`#[-i
? }
e1olp'r!Z一切搞定.是不是很簡單,但估計你還是有點暈.你還是想問我,id和name到底是如何設置的?
6Dp!SX#E(e0MtguAction設置了userList就夠了,它包含夠多的信息了. struts看見了你設置了userList.它就知道了這個list里面都user(entity),useruser(entity)里面不是有很多get,set方法嗎?JAVA中文站社區門戶 g'|"K*`2d M

9] `.lIb3{8S再看下下面的東東.
!aJDU3Vpa-P< logic:iterate id="user" name=" sampleForm " property="userList">
8e)L!jGU;gO n6a< bean:write name="user" property="id" />
5xNl.TZJ*Kid=”user”,和name="user" 對應了,明白啥意思嗎?.就象循環指明索引一樣. property="id"就是要顯示的這個索引對應的內容.Struts就是這樣來認id和name的.

v+x3iZ'T!k2t*o~4T JAVA中文站社區門戶a7u,x4B_}0C R

③接下來,看一個加強版的table例子,在顯示的明細一覽,每一行前面加一個radio框,讓用戶選擇哪個user.進行刪除操作.
eW.L_$@s hi@SampleJsp:
-iO"ae^ Z? < logic:present name="sampleForm" property="userList" >
jQ Rv#f? < logic:iterate id="user" name=" sampleForm " property="userList">
2m;R;x8mN'D&i:O@? < tr>JAVA中文站社區門戶so4V[)U1ku
??? < td>JAVA中文站社區門戶(\ J)]-T I]$gu-H.]#i
? < html:radio name="sampleForm" property="selectedUserId" value="< %=((jp.co.mhcb.obs.persis.entity.User)pageContext.getAttribute("user ")).getId().toString() %>" />JAVA中文站社區門戶)EY dmM aC
?? < /td>JAVA中文站社區門戶(z#T5?.c4kTn ~7}
?? < td>< bean:write name="user" property="id" />< /td>JAVA中文站社區門戶h[mxV(D4f
?? < td>< bean:write name="user" property="name" />< /td>
?9ZF1g4\ K'PA? < /tr>
?+h"F#x e*wdj)F< /logic:iterate> JAVA中文站社區門戶\[M;B3x"_m
< /logic:present>JAVA中文站社區門戶8Y A c/[Sb

e!d\/^JsampleForm.java:JAVA中文站社區門戶 dmP:[(qU*|H(? U
??? String selectedUserId; JAVA中文站社區門戶Z%i| i!F;E+p7gCq
??? public String getSelectedUserId () { return selectedUserId; }
0J1J ]qb1r ?y??? public void setSelectedUserId(String selectedUserId) {JAVA中文站社區門戶H%\C)M-t9[@#J+y
??????? this.selectedUserId = selectedUserId;JAVA中文站社區門戶(bAP)K4C8F)M
??? }JAVA中文站社區門戶6D Q,F V)O*aXAv
SampleAction.java JAVA中文站社區門戶)ytt)ETx
public ActionForward delete(ActionMapping mapping,
?*ZfUP!z? ActionForm argForm, HttpServletRequest req, HttpServletResponse res)
4[}K#R6k&J^wKC??????? throws Exception {
A8u`(d,y u/B-O??????? SampleForm form = (SampleForm) argForm;
cj}o!Q4MM!_0_??????? String selectedUserId = form.getSelectedUserId();
]4N%v"SV%GE??????? // get user by selected idJAVA中文站社區門戶9H-\j{vQ
??????? User user = getUser(selectedUserId);JAVA中文站社區門戶z;U}&a)](H
??????? // delete user
e,M$t$k2xf5U??????? }
$]cV4SiP1L!wradio框. propertys值對應form里的對象.value值是該行radio對應的user中的id(數據表中user的id是主鍵),那么當用戶選中任何一個radio,struts通過form得到propertys值,就可以得到選中哪個user了,然后進行相應操作.JAVA中文站社區門戶e%`N$` lb CM
設置哪個user被選中,一是通過用戶選擇,沒的說.二,通過程序控制,如果進入初期畫面,我要讓user.id = ‘3’的radio被選中,只要在初期Action中form.selectedUserId(“3”);一切搞定,就一句話,進入初期畫面時, user.id = ‘3’的radio被選中了.JAVA中文站社區門戶1Sj*w*fqj

o/J0{g$nY,{v@注意以下標簽JAVA中文站社區門戶2c7HFGa:JR`#j3s
< html:radio name="sampleForm" property="selectedUserId" value="< %= ((jp.co.mhcb.obs.persis.entity.User)pageContext.getAttribute("user ")).getId().toString() %>" />JAVA中文站社區門戶z"YH9^rqu
下面發揮想象一下以下標簽啥意思?JAVA中文站社區門戶^9w8Y]6t n~5Y T
< html:radio name="sampleForm" property="selectedUserId" value="< %= ((jp.co.mhcb.obs.persis.entity.User)pageContext.getAttribute("user ")).getObject1().getObject1().getObject2()…………getObjectN().getId().toString() %>" />JAVA中文站社區門戶3Nj] c0_k+TE$\!R1_)_
能看出來什么?JAVA中文站社區門戶^9~E*V*R7|
User包含object1,object2包含object3,….objectN-1包含objectN,objectN有id屬性.JAVA中文站社區門戶|6D8`g ypB
看出來了嗎?靈活運用,想象一下,各個entity和form,action該如何寫?

(il,eu2zL

qoG_ I&k④接著介紹一下,checkbox是使用.畫面有一排checkbox,如何設置和得到數據呢?先看一個簡單點的. JAVA中文站社區門戶7h5H4deQb
?< html:checkbox name=" sampleForm" property="chechbox1" value="true" />
.}YP1_(\;[?< html:checkbox name=" sampleForm" property="chechbox2" value="false" />JAVA中文站社區門戶*o Q \&u9K1@Vn
?< html:checkbox name=" sampleForm" property="chechbox3" value="true" />JAVA中文站社區門戶CO ^ X(Nyz&Z
第二個框未選中,其他選中.form里面對應三個String chechbox1,chechbox2, chechbox3;下面來個復雜點的,多選擇對話框multiboxJAVA中文站社區門戶-r\6H4~ CXL*c['j
SampleJsp中:
]n"lTS*^r,V< logic:iterate name = "sampleForm" id="user" property="userList">
2f E5RWPB i? < html:multibox property="selectedUsers">
T4y&Zr7ux(Q??? < bean:write name="user" property="id"/>
h\h[-X lMF Q? < /html:multibox>JAVA中文站社區門戶-r-ir MV/^4@"Ot
? < bean:write name="user" property="name"/> JAVA中文站社區門戶&f RnHiC0e*Z*CZ
< /logic:iterate>JAVA中文站社區門戶ds T)zS)Huwe^

8h%g6Gd+t^I`SampleForm中:
T0R T}E8~??? private String userList[] = new String[0];
a Aah!KP9A??? public String[] getUserList () { return userList;}
L.CDQv&Dw.QX L??? public void setUserList(String[]userList) {this.userList = userList;}

]YxK\T5X

l%w"R c-mZAR+F2~??? private String selectedUsers[] = new String[0];
!cS1G}2D J i??? public String[] getSelectedUsers () {return selectedUsers;}JAVA中文站社區門戶0r C(f[O
??? public void setSelectedUsers (String[]selectedUsers) {this.selectedUsers = selectedUsers;}

KLnKkA8P)^ JAVA中文站社區門戶 u9G e"r'Z7@+u9x

如果我們在初期時在action里對bean賦值:
7P%z_(q}auserList = { User(”1”,”name1”), User(”2”, ”name2”), User(”3”,”name3”) }
ek?^,}ZiselectedUsers = {“1”,”3”}
PH%KG$FV#b%l2z8`*O那畫面選中第一第三個選擇框.

gV+K^9lE.z$G JAVA中文站社區門戶-LXL7rXS

用戶修改選擇框,選擇了第二,第三個,那么在action里取bean的值
Y!Iz0u:n)a/qlG bString selectedItems[] = new String[list.getSize()];
L#z-^W)GDj0Ik,C UselectedItems = form.getSelectedItems();JAVA中文站社區門戶W'J(l&f"wn
for ( int i = 0 ; i <? selectedItems.length ; ++i ){JAVA中文站社區門戶*Ua `d8d
? LOGGER.debug( "selected " + i + ": " + selectedItems[i]);
U kQH f}
;zD4w6c-ESelected 0 : 2 JAVA中文站社區門戶A*J9M6Ek#?3m
Selected 1 : 3JAVA中文站社區門戶L Fkt'BW2T
selectedUsers = {“2”,”3”}

+P(|#|*\D.CL

Y b%k4QF0q⑤畫面上有一user表,每條數據前面有個button,對應一條記錄,如何確定選中那條數據呢??
A'L^R"US4{QSampleJsp:
lMbA oh,zZs< logic:iterate id="user" indexId="buttonIndex" name="sampleForm" property="userList">JAVA中文站社區門戶A!d h2x x"C/FURZ
< tr>JAVA中文站社區門戶yO @ f vn&\sFD8\|
< td>
4t$\Fn1U*nC0F^< html:submit property="button" indexed='false' >JAVA中文站社區門戶y [z]#r^'Ip(dA*t
< bean:message key="label.button.selectUser"/>JAVA中文站社區門戶"cT(ae+\D
< /td>JAVA中文站社區門戶k_f@{7A5F'i+GU8w
< td>< bean:write name="user" property="id" />< /td>JAVA中文站社區門戶(fShe,IDe
< td>< bean:write name="user" property="name" />< /td>JAVA中文站社區門戶(P0A`m[ c
< /tr>JAVA中文站社區門戶#}i;N0YMc*l
< html:hidden name="sampleForm" property="selectUserIndex" value='< %= "" + buttonIndex %>'/>JAVA中文站社區門戶,Me!x+} i }v
< /logic:iterate>

;wD*E*\jjs.yC0| JAVA中文站社區門戶PsE3O ` g{

SampleAction.java
c C IOjh.~e?? int index = Integer.parseInt(form.getSelectUserIndex());
1Eu|1sz6mdn;r3[P?? 通過一個隱藏變量,得到選中第幾條數據,然后就能做相應處理.JAVA中文站社區門戶[d2I~s

,e&o@aoAB8g⑥上面都是通過form和jsp傳輸數據的.還有session也能讓jsp顯示數據.但如果我做為設計者,是不提倡這樣做的.為什么就不說了.但日本以前的設計很可能會用到session和jsp傳數據.那我就有必要講一下如何用了?做為高達的設計者還是盡量不要用session和jsp溝通.JAVA中文站社區門戶&P T]t!br \*R/D
有個下拉列表框,里面顯示所有用戶名稱.用session傳數據.JAVA中文站社區門戶%y N@fF9Ox1s
SampleJsp:
1l&p5p@,|< %pageContext.setAttribute("userList",(List) (FwThreadContext
m5n-]2K@:{,S+i??????????????? .getAttribute("AllUser")));JAVA中文站社區門戶V;d {+kp^,] t
%>JAVA中文站社區門戶v7V-L0Pd!c:ay
< html:select property="selectedUser"> JAVA中文站社區門戶"FcE(WT&O I
? < html:options collection="userList" property="id" labelProperty="name" />
PSH$O'X6F< /html:select>JAVA中文站社區門戶Y8lE(@C8PR

JAVA中文站社區門戶Q6K lA Y_;db

SampleForm.java:
"uH1k%UR'^ Mk6}??? String selectedUser;
A9`r2`-tg ^n| _Form里只要一個selectedUser,表示選擇的user. 下拉列表框用session表示.JAVA中文站社區門戶)R6zAM*?'}
在action等地方設置了session的內容,那下拉列表框就能顯示內容了.這里session名為AllUser, labelProperty="name"是下拉列表框顯示的東東, property="id"是下拉列表框每條數據隱藏的東東.通過property="selectedUser"里得到選中那條數據

W_ R8p:O*@Pn x

'c3|C6X{7`3w&d ^S$m< html:text name="sampleForm" property="name"
t0[l+G5X1g{hvalue="< %= (FwThreadContext.getAttribute("UserName")).toString() %>" />JAVA中文站社區門戶Z;zIUBUR
這里很簡單就是把session名為UserName設置到Text框中.得的時候還是通過form中的name得到.

h,u _C,^$E3QIR9No

W!NK1s_~)E4?.WZ tF
#s C6c1p0YyI%SS標簽寶典:
(o)i-ap @1,lable
xhDioA6N|< bean:write name="sampleForm" property="name" />
QDa2zv2,text
8~/U2KV@%YnV< html:text name="sampleForm " property="name" />
aII4R6`5M3,button
%e ]vn@{ }zG< html:submit property="button">JAVA中文站社區門戶9FQQS]
< bean:message key="label.button.save" />JAVA中文站社區門戶\6_yX}.F'U
< /html:submit>JAVA中文站社區門戶'e6{Et&|
< html:button property="button" οnclick="javascript:openCalendar(date);">
3I}7r,L)qd0e|< bean:message key="label.button.date" />
0_e&v!s5EZ< /html:button>
0W!Z7Y9m]-VO4yC4,select
.t5BbY(B r!Q"U)j4S< html:select property="selectedUser"> JAVA中文站社區門戶pV2VYZo+?;@
? < html:options name="sampleForm" collection="userList" property="id" labelProperty="name" />JAVA中文站社區門戶]G*Ru&sE
< /html:select>
UYqnK_2U3d5,checkbox,multibox
,G-y8Q+wJG? < html:checkbox name="sampleForm" property="chechbox1" value="true" />JAVA中文站社區門戶UR%bS kL5w
?
%[^Le Od-x.cX5nd? < logic:iterate name = "sampleForm" id="user" property="userList">JAVA中文站社區門戶9q(t2Fe+fo
??? < html:multibox property="selectedUsers">
2j9`m/Nb@???? < bean:write name="user" property="id"/> JAVA中文站社區門戶,Q~ V"k?5k6mWz/?2Q
??? < /html:multibox>
(pF;VM/C*MQ??? < bean:write name="user" property="name"/>
`@8e'D:m]`e/{? < /logic:iterate>JAVA中文站社區門戶%T!w-`"Q{

p$c(W:ns^[6, 循環邏輯JAVA中文站社區門戶l*Fo2Ts5W
< logic:present name="sampleForm" property="userList" >
8wWnFWw^'lk0mp'y< logic:iterate id="user" name=" sampleForm " property="userList">JAVA中文站社區門戶`U,]lI`7r ?(]%?
< tr>
e"kO6{ I g5N*@e? < td>
;Q(N\.\?J+o+? V? < html:radio name="sampleForm" property="selectedUserId" value="< %= ((jp.co.mhcb.obs.persis.entity.User)pageContext.getAttribute("user ")).getId().toString() %>" />JAVA中文站社區門戶 pFT8L:M%~9zz
? < /td>
V/S$G B0Fl6Z:z \? < td>< bean:write name="user" property="id" />< /td>
k;e"H&B6c\#`? < td>< bean:write name="user" property="name" />< /td>JAVA中文站社區門戶IrRj2QCJ/vp
< /tr>JAVA中文站社區門戶6e0U!i~ DQc7}"Q
< /logic:iterate> JAVA中文站社區門戶9n4]]P}
< /logic:present>JAVA中文站社區門戶3bP axI4{

JAVA中文站社區門戶S&l }5x;|*?d HUU

7,if邏輯
wP }1VR_< logic:equal name=" sampleForm " property="showAllFlg" value="true" >JAVA中文站社區門戶i7lmk s v{$W-R
? < html:submit property="button">JAVA中文站社區門戶I9vLI"J
??? < bean:message key="label.button.all"/>
mXO8x_r:_%Q3p? < /html:submit>
;wO0j{9v< /logic:equal>JAVA中文站社區門戶-f$Ws1ZGa2bO4\1R*|!\:c'~
< logic:equal name=" sampleForm " property=" showAllFlg " value="false" >JAVA中文站社區門戶]:a^@]3g
? < html:submit property="button">JAVA中文站社區門戶 ^E+Jgd6F
??? < bean:message key="label.button.noall"/>JAVA中文站社區門戶s'^nc1fw ^{4N
? < /html:submit>
/Z&XC H'AH< /logic:equal>??
vw"M4QxJAVA中文站社區門戶:xsk%s!mL_?

轉載于:https://www.cnblogs.com/feifeihu/archive/2012/08/15/2640262.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260510.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260510.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260510.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

“multiprocessing\spawn.py”, line 105, in spawn_main錯誤與解決方法

記錄一個不知名的錯誤錯誤解決方法OS&#xff1a; Windows 10 錯誤非常的長&#xff0c;以至于&#xff0c;我也沒有什么耐心去看&#xff0c;看了前面幾行&#xff0c;應該是多線程引起的。下面太長&#xff0c;可以選擇不看。 錯誤 Traceback (most recent call last): Trac…

hpunix下11gRac的安裝

一.檢查環境 1.操作系統版本# uname -a 2.補丁包三大補丁包#swlist -l bundle|grep QPKAPPS#swlist -l bundle|grep QPKBASE#swlist -l bundle|grep HWEnable11i #swlist -l patch -a supersedes|grep PHKL_XXXXX檢查是否已有或是已被替代For HP-UX 11i V3 (11.31): PHCO_40381…

【轉】徹底搞清計算結構體大小和數據對齊原則

數據對齊: 許多計算機系統對基本數據類型合法地址做出了一些限制&#xff0c;要求某種類型對象的地址必須是某個值K(通常是2&#xff0c;4或8)的倍數。這種對齊限制簡化了形成處理器和存儲器系統之間的接口的硬件設計。例如&#xff0c;假設一個處理器總是從存儲器中取出8個字節…

python里pip是什么意思_python使用pip的方法是什么

python使用pip的方法是什么 發布時間&#xff1a;2020-08-25 11:51:08 來源&#xff1a;億速云 閱讀&#xff1a;104 作者&#xff1a;小新 小編給大家分享一下python使用pip的方法是什么&#xff0c;相信大部分人都還不怎么了解&#xff0c;因此分享這篇文章給大家參考一下&am…

Pytorch 學習率衰減 之 余弦退火與余弦warmup 自定義學習率衰減scheduler

學習率衰減&#xff0c;通常我們英文也叫做scheduler。本文學習率衰減自定義&#xff0c;通過2種方法實現自定義&#xff0c;一是利用lambda&#xff0c;另外一個是繼承pytorch的lr_scheduler import math import matplotlib.pyplot as plt import numpy as np import torch i…

c++ 字符串賦給另一個_7.2 C++字符串處理函數

點擊上方“C語言入門到精通”&#xff0c;選擇置頂第一時間關注程序猿身邊的故事作者閆小林白天搬磚&#xff0c;晚上做夢。我有故事&#xff0c;你有酒么&#xff1f;C字符串處理函數C語言和C提供了一些字符串函數&#xff0c;使得用戶能很方便地對字符串進行處理。這些是放在…

如何檢測遠程主機上的某個端口是否開啟

有時候我們要測試遠程主機上的某個端口是否開啟&#xff0c;無需使用太復雜的工作&#xff0c;windows下就自帶了工具&#xff0c;那就是telnet。怎么檢測呢&#xff0c;按下面的步驟&#xff1a; 1、安裝telnet。我的win7下就沒有telnet&#xff0c;在cmd下輸入telnet提示沒有…

Windows10 + WSL (Ubuntu) + Anaconda + vscode 手把手配置python運行環境(含虛擬環境)

配置WSL windows桌面下&#xff0c;按下面順序可以找到 "啟動或關閉windows功能” &#xff0c; 開始 -> 設置 -> 應用 -> 應用和功能 -> 可選功能 -> 相關設置下 更多Windows功能&#xff08;滾動鼠標到底部&#xff09;點擊后&#xff0c;會彈出 啟動或…

Inline函數使用注意事項

Inline函數使用注意事項 1.在一個文件中定義的inline函數不能再另一個文件中使用 2.inline函數應簡潔&#xff0c;只有少數幾個語句。 3.在inline函數中不能有循環&#xff0c;if&#xff0c;switch語句。 4.inline函數要在調用和聲明前定義&#xff01;&#xff01;&#xff0…

2019編譯ffepeg vs_如何在windows10下使用vs2017編譯最新版本的FFmpeg和ffplay

該文章描述了如何在windows10 64位系統下面編譯出FFmpeg的庫及其自帶的ffplay播放器&#xff0c;而且全部采用最新的版本&#xff0c;這樣我們可以在vs2017的ide下調試ffplay&#xff0c;能使我們更容易學習FFmpeg的架構以及音視頻播放器的原理。步驟&#xff1a;1.安裝vs2017在…

訓練集山準確率高測試集上準確率很低_推薦算法改版前的AB測試

編輯導語&#xff1a;所謂推薦算法就是利用用戶的一些行為&#xff0c;通過一些數學算法&#xff0c;推測出用戶可能喜歡的東西&#xff1b;如今很多軟件都有這樣的操作&#xff0c;對于此系統的設計也會進行測試&#xff1b;本文作者分享了關于推薦算法改版前的AB測試&#xf…

C#實現漸變顏色的Windows窗體控件

C#實現漸變顏色的Windows窗體控件! 1,定義一個BaseFormGradient,繼承于System.Windows.Forms.Form2,定義三個變量: privateColor _Color1 Color.Gainsboro; privateColor _Color2 Color.White; privatefloat_ColorAngle 0f;3,重載OnPaintBackground方法 protecte…

ios7開發學習筆記-包括c oc 和ios介紹

請查看我的新浪資料分享 http://iask.sina.com.cn/u/2430843520 轉載于:https://www.cnblogs.com/langtianya/p/3708298.html

Windows下 jupyter notebook 運行multiprocessing 報錯的問題與解決方法

文章目錄測試用的代碼錯誤解決方法測試用的代碼 下面每一個對應一個jupyter notebook的單元格 import time from multiprocessing import Process, Queuedef generator():c 0while True:time.sleep(1.0) # read somethingyield cc 1%%timeds generator() for i in range(3…

如何將javaweb項目部署到linux下

以下是對將javaweb項目部署到linux下的方法進行了詳細的分析介紹一般都在windows下開發的現在部署到linux下將項目達成war包(用eclipse項目右鍵>Export>選擇war file)將tomcat(用winSCP當然你也可以用secureCRT用securCRT需要建立sftp(即上傳文件的目錄)用put tomcat命令…

vc mysql_vc6.0連接mysql數據庫

一、MySQL的安裝Mysql的安裝去官網下載就可以。。。最新的是5.7版本。。二、VC6.0的設置(1)打開VC6.中選0 工具欄Tools菜單下的Options選項&#xff0c;在Directories的標簽頁中右邊的“Show directories for:”下拉列表中“Includefiles”&#xff0c;然后在中間列表框中添加你…

python class用法_python原類、類的創建過程與方法

【小宅按】今天為大家介紹一下python中與class 相關的知識……獲取對象的類名python是一門面向對象的語言&#xff0c;對于一切接對象的python來說&#xff0c;咱們有必要深入的學習與了解一些知識首先大家都知道&#xff0c;要獲取一個對象所對應的類&#xff0c;需要使用clas…

網易公開課

計算機科學及編程導論 http://v.163.com/special/opencourse/bianchengdaolun.html 抽象編程 http://v.163.com/special/opencourse/abstractions.html轉載于:https://www.cnblogs.com/anyboo/archive/2012/08/24/2653537.html

深度學習中的一些常見的激活函數集合(含公式與導數的推導)sigmoid, relu, leaky relu, elu, numpy實現

文章目錄Sigmoid(x)雙曲正切線性整流函數 rectified linear unit &#xff08;ReLu&#xff09;PReLU(Parametric Rectified Linear Unit) Leaky ReLu指數線性單元 Exponential Linear Units &#xff08;ELU&#xff09;感知機激活%matplotlib inline %config InlineBackend.f…

最牛X的GCC 內聯匯編

正如大家知道的&#xff0c;在C語言中插入匯編語言&#xff0c;其是Linux中使用的基本匯編程序語法。本文將講解 GCC 提供的內聯匯編特性的用途和用法。對于閱讀這篇文章&#xff0c;這里只有兩個前提要求&#xff0c;很明顯&#xff0c;就是 x86 匯編語言和 C 語言的基本認識。…