- 浏览: 52322 次
- 性别:
最新评论
struts1 标签
标签库:
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" onclick="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>
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" onclick="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>
相关推荐
Struts1 标签库详解 Struts1 标签库是 Apache Jakarta 的一个著名的开源项目,目标是为构建基于 Java 的 web 应用程序提供一个框架。Struts 提供了非常多的标签,依据功能和使用习惯的不同被分到了五个标签库中:...
Struts1标签库是Java Web开发中的一种工具,主要用于简化基于MVC模式的Struts框架下的JSP页面开发。尽管目前Struts1已逐渐被更新的版本如Struts2取代,但了解其标签库仍然有助于理解Web应用的历史发展和基础概念。 ...
Struts1标签库是其核心特性之一,它提供了一系列预定义的JSP标签,使得开发者可以更加方便地在视图层构建动态页面,减少对Java脚本的依赖,提高代码的可读性和可维护性。 1. **Struts1标签库概述** Struts1标签库...
在深入探讨Struts1框架中的标签库之前,我们先简要了解一下Struts1框架本身。Struts1是基于MVC(Model-View-Controller)设计模式的Java Web应用框架,它极大地方便了Web应用程序的开发,特别是对于大型、复杂的项目...
Struts1是一个经典的Java Web开发框架,其核心之一就是丰富的标签库,它简化了开发者在JSP页面上的工作。在本文中,我们将深入探讨Struts1的四个主要标签库:bean、logic、html和tiles,并重点讲解每个库中的关键...
5. Nested标签库:增强了其他Struts标签的嵌套能力,允许更复杂的数据结构的表示。 在使用Struts1标签时,有一些公共特性需要注意,如`styleId`用于指定自定义标签的脚本变量名,`name`和`scope`分别用于查找和定义...
在使用Struts1标签时,应避免使用scriptlet,尽管它们的表达式仍然可以在Struts标签中使用。确保表达式完整,如正确的`<html:link>`标签写法。 Struts1的标签设计旨在提高可读性和可维护性,减少JSP页面中的Java...
Nested库增强了其他Struts标签的嵌套功能,使得在复杂结构的数据模型中使用标签更加方便。例如,可以嵌套`<nested:property>`来处理多层属性的访问。 在使用Struts1标签时,有几个共同的特性需要注意,比如`...
Struts1标签手册是关于Apache Struts框架中用于构建Web应用程序的标签库的详细文档,主要包括五类标签库:HTML, Nested, Logic, Bean, 和 Titles。这些标签库提供了丰富的功能,简化了开发者的工作,使得在Java环境...
Struts1是一个经典的Java Web框架,它通过提供一系列的标签库简化了JSP页面的开发,使得业务逻辑和展示逻辑分离。在这个实例中,我们主要关注Struts1的标签应用,以及如何在JSP页面中使用这些标签。 首先,我们看到...
Struts1标签库是Java Web开发中的一个重要组成部分,主要用于构建MVC(模型-视图-控制器)架构的应用程序。在Struts1框架中,标签库极大地简化了视图层的开发,使得开发者能够更专注于业务逻辑,而不是繁琐的HTML...
- JSP页面,展示了如何使用Struts1标签库来构建用户界面。 - 配置文件,如struts-config.xml,展示了如何配置Struts1框架。 - 相关的资源文件,如图片、样式表或JavaScript文件,它们与用户界面交互有关。 - 测试...
此外,作者强调学习Struts标签的最佳方法是通过示例,因为它们在实践中具有广泛的用途和强大的功能。 总之,Struts1标签库提供了丰富的功能,帮助开发者更高效地编写JSP页面,降低了视图层与业务逻辑的耦合度。了解...
1. **JSP和Java代码分离**:通过将原本需要在JSP页面中编写的Java代码转换为Struts标签的形式,使得页面更加简洁且易于维护。这不仅提升了开发效率,还使得页面逻辑更加清晰明了。 2. **与框架配置交互**:Struts...
Struts1标签库是Java Web开发中非常重要的一个组件,它是Apache Struts框架的一部分,用于简化JSP页面的编写,提高代码的可读性和可维护性。以下将详细阐述Struts1标签库中的各个标签及其用途。 1. `bean:cookie`:...
- 专为增强对其他Struts标签的嵌套使用而设计,使得在复杂对象模型中处理表单输入更加方便。 举例: ```jsp 登录" /> 取消" /> ``` 在Struts配置文件(struts-config.xml)中应有对应的配置: ```xml ...
### JSP Struts1 标签实例详解 #### 一、概述 Struts1 是一个基于 Java Servlet/JavaServer Pages 技术的企业级 Web 应用框架,它使用 MVC(Model-View-Controller)设计模式来组织应用。Struts1 的标签库提供了...