440 likes | 716 Views
Struts 常用标签. 中科软培训中心. 回顾. 什么是 MVC? Struts 是怎么去实现 MVC 的 ? Struts 基本组件有那些 ? 基本组件之间有什么关系 ?. 重点. 了解 Struts 标签的运行机制 ; 学会使用 html 系列标签 ; 学会使用 bean 系列标签 ; 学会使用 logic 系列标签 ; 了解 Nested 系列标签 ;. 回顾一下自定义标签. 写一个实现 Tag 接口的 Java 类 ; 在 java 类中处理一些业务逻辑 , 如果要输出到页面就通过 out 对象输出 ; 写一个 tld 的配置文件 ;
E N D
Struts常用标签 中科软培训中心
回顾 • 什么是MVC? • Struts是怎么去实现MVC的? • Struts基本组件有那些? • 基本组件之间有什么关系?
重点 • 了解Struts标签的运行机制; • 学会使用html系列标签; • 学会使用bean系列标签; • 学会使用logic系列标签; • 了解Nested系列标签;
回顾一下自定义标签 • 写一个实现Tag接口的Java类; • 在java类中处理一些业务逻辑,如果要输出到页面就通过out对象输出; • 写一个tld的配置文件; • 在JSP页面导入tld文件并使用;
Struts标签 • 方便用户,提高代码效率; • Struts标签和HTML标签效果完全相同; • 使View和Struts的其它组件更好的结合在一起;
Struts标签分类 • HTML标签库 • Bean标签库 • Logic标签库 • Nested标签库
HTML标签库 HTML标签分类 • 用于生成基本的HTML元素的标签; • 用于生成表单的标签; • 显示错误或正常消息的标签;
用于生成基本的HTML元素的标签 • <html:html>:生成HTML<html>元素. • <html:base>:生成HTML<base>元素. • <html:link>:生成HTML<a>元素. • <html:rewrite>:生成用户请求的URL. • <html:img>:生成HTML<img>元素.
例子:Struts-02/HTML.jsp <body> <div align="center"> <html:rewrite page="/HTML.jsp" /> <br> <html:link href="http://www.baidu.com">百渡</html:link> <br> <html:img src="imge/123.jpg" /> <br> <html:link forward="index">返回首页</html:link> </div> </body>
用于生成表单的标签 所有的表单标签的property属性必须要跟FormBean中的属性中对应!action,formBean和property根据struts-config.xml中具体配置有着对应关系; • <html:form>:生成HTML<form>元素; • <html:text>:生成HTML<input type=text>元素 • <html:password>:生成HTML<input type=password>元素 • <html:hidden>:生成HTML<input type=hidden>元素 • <html:submit>:生成HTML<input type=submit>元素 • <html:cancel>:生成HTML<input type=cancel>元素 • <html:reset>:生成HTML<input type=reset>元素
检查框和单选按钮标签 • <html:checkbox>:生成HTML<input type=checkbox>元素 • <html:multibox>:在表单上生成复选框元素 • <html:radio>:生成HTML<input type=radio>元素
下拉列表和多选列表标签 • <html:select>:生成HTML<select>元素 • <html:option>:生成HTML<option>元素 • <html:options>:生成一组HTML<option>元素 • <html:optionsCollection>:生成一组HTML<option>元素
例:Struts-02/FORM.jsp <div align="center"> <html:form action="/disp" method="post"> <bean:message bundle="FORM" key="FORM.jsp.form.userName" /> <html:text property="userName"></html:text> <html:errors property="userName" bundle="ERRORS" /> <br> <bean:message bundle="FORM" key="FORM.jsp.form.userPwd" /> <html:password property="userPwd"></html:password> <br> <html:hidden property="hidden" value="这是一个隐匿值" /> <br> <hr> <bean:message bundle="FORM" key="FORM.jsp.form.sex" /> <html:radio property="sex" value="男"> <bean:message bundle="FORM" key="FORM.jsp.form.sex.man" /> </html:radio> <html:radio property="sex" value="女"> <bean:message bundle="FORM" key="FORM.jsp.form.sex.woman" /> </html:radio> <br> <bean:message bundle="FORM" key="FORM.jsp.form.married" /> <html:checkbox property="married"></html:checkbox> <br> <bean:message bundle="FORM" key="FORM.jsp.form.loves" /> <html:multibox property="loves">上网</html:multibox> <bean:message bundle="FORM" key="FORM.jsp.form.loves.items.online" /> <html:multibox property="loves">游戏</html:multibox> <bean:message bundle="FORM" key="FORM.jsp.form.loves.items.palyGame" /> <html:multibox property="loves">购物</html:multibox> <bean:message bundle="FORM" key="FORM.jsp.form.loves.items.shopping" /> <html:multibox property="loves">电影</html:multibox> <bean:message bundle="FORM" key="FORM.jsp.form.loves.items.movie" /> <br> <bean:message bundle="FORM" key="FORM.jsp.form.birthday" /> <html:select property="year"> <c:forEach begin="1940" end="2005" var="y"> <html:option value="${y}">${y}</html:option> </c:forEach> </html:select> <bean:message bundle="FORM" key="FORM.jsp.form.birthday.items.year" /> <html:select property="month"> <c:forEach begin="1" end="12" var="m"> <html:option value="${m}">${m}</html:option> </c:forEach> <bean:message bundle="FORM" key="FORM.jsp.form.birthday.items.month" /> <br> </html:select> <br> <bean:message bundle="FORM" key="FORM.jsp.form.department" /> <html:select property="department"> <html:options collection="department" property="value" labelProperty="label" /> </html:select> <br> <hr> <html:submit> <bean:message bundle="FORM" key="FORM.jsp.form.button.submit" /> </html:submit> <html:reset> <bean:message bundle="FORM" key="FORM.jsp.form.button.reset" /> </html:reset> <html:cancel> <bean:message bundle="FORM" key="FORM.jsp.form.button.cancel" /> </html:cancel> </html:form> </div>
表单中的文件标签 • <html:file>生成HTML<input type=file>元素 在Frombean中对应此标签的数据类型是org.apache.struts.upload.FormFile对象;
例:Struts-02/FileFORM.jsp <html:form action="/dofile" enctype="multipart/form-data"> <bean:message bundle="FORM" key="FileFORM.jsp.form.fileName" /> <html:file property="file"></html:file> <html:submit> <bean:message bundle="FORM" key="FileFORM.jsp.form.button.sumbit" /> </html:submit> </html:form>
<html:errors/>标签 • 用于显示request和session做用域对象中的ActionMessages(或其字类)对象中的文本; • <bean:message/>作用是一样的,不过.我们多数是用<html:errors/>标签来完成错误输出,而<bean:message/>标签用来完成资源文件输出; 例:<html:errors property="sex"> </html:errors>
Bean标签库 Bean标签分类 • 用于访问HTTP请求信息或JSP隐含对象的bean标签; • 用户访问Web应用资源的Bean标签; • 用于定义或输出JavaBean的Bean标签;
用于访问HTTP请求信息或JSP隐含对象的bean标签 • <bean:cookie>:访问Cookie信息 • <bean:header>:访问HTTP请求中的header信息 • <bean:parameter>:访问请求参数; • <bean:page>:访问JSP隐含对象;
<bean:cookie>--访问Cookie信息 作用:可以检索保存在浏览器中的cookie; 属性: • Id:定义一个javax.servlet.http.Cookie的变量,并把他放到page范围内; • Name:指定cookie的名字; • Value:指定cookie的默认值,如果name不存在,就指定value的默认值
<bean:header>--访问HTTP请求中的header信息 作用:用于检索HTTP请求中的Header信息; 属性: • Id:定义一个java.lang.String的对象.并放到page范围内; • Name:指定要检索的Header信息;
<bean:parameter>--访问请求参数 作用:用于检索HTTP中的请求参数; 属性: • id:定义一个java.lang.String类型的变量,并放到page范围中; • Name:指定请求参数名; • Value:指定请求参数的默认值;
<bean:page>--访问JSP隐含对象 作用:用于检索JSP隐含对象,如session,request和response等; 属性: • Id:定义一个引用的隐含对象的变量,并放到page中; • Property:指定隐含对象的名称,可选项有:application,config,request,response,session;
用户访问Web应用资源的Bean标签 • <bean:message>:显示ResourceBundle中的消息; • <bean:resource>:把Web资源加载到一个JavaBean中; • <bean:struts>:访问Struts内在配置对象; • <bean:include>:包含一个Web资源;
<bean:message>--显示Resource-Bundle中的消息 作用:用于输出Resource Bundle文件中的资源信息; 属性: • Bundle: 指定Resource Bundle文件,配合struts-config.xml中的<message-resources/>标签的key属性使用; • Key:指定Resource Bundle文件中的key; • Name:定义一个java.lang.String类型的变量,值等于Resource Bundle文件中key所对应的值; • Property:配合Name属性使用; • Arg0到arg4:配合Resource Bundle文件中值的{0}…{4}占位符使用,用来替换占位符的值;
<bean:resource>--把Web资源加载到一个JavaBean中 作用:用于检索Web资源的内容; 属性: • Id:定义一个Web资源的变量; • Name:指定Web资源的路径; • Input:如果没有设置input属性,则ID属性定义的变量为字符串类型,如果给input属性设置了值,则id属性定义的变量为java.io.InputStream类型;
<bean:struts>--访问Struts内在配置对象 作用:用于检索Struts框架内在的对象; 属性: • Id:定义一个page范围类的变量; • Formbean:指定actionFormBean对象; • Forward:指定actionForward对象; • mapping:指定actionMapping对象; FormBean/Forward/Mapping属性的值分别与struts-config.xml文件中的对象所匹配;
<bean:include>--包含一个Web资源 作用:用来包含其他Web资源的内容,跟标准标签<jsp:include>用法一样; 属性: Forward:指定全局转发路径,关联struts-config.xml文件使用; Page:指定相对于当前应用的URL以’’/’’开头; Href:指定完整的URL;
用于定义或输出JavaBean的Bean标签 • <bean:define>:定义一个变量; • <bean:write>:显示一个变量的值; • <bean:size>:获得一个集合的长度;
<bean:define>--定义一个变量 作用:用于定义一个变量; 属性: • Id:定义变量名字; • toScope:指定这个变量存放范围,缺省为page; • Value:直接给变量赋值; • Name和property:将存在作用域中的对象的属性值赋给变量;
<bean:write>--显示一个变量的值 作用:用于在网页上输出某个Bean或它的属性的内容; 属性: • Name:存在作用域对象中的属性名; • property:配合name属性一起使用,输出对象的属性; • Format:按指定格式输了; • Filter:只否把html标签原样输出;
<bean:size>--获得一个集合的长度 作用:用于获得Map,Collection或数组的长度; 属性: • Id:定义一个变量存在长度; • Name:集合名称;
例:Struts-02/BEAN.jsp <body> <h2> 用户访问Web应用资源的Bean标签 </h2> <hr> <b>这是从资源文件时面读出来的:</b> <bean:message key="BEAN.jsp.message" /> <br> <b>得到并输出一个资源对象:</b> <bean:resource id="res1" name="/include.jsp" /> <bean:write name="res1" /> <br> <b>首页的路径:</b> <bean:struts id="index1" forward="index" /> <bean:write name="index1" property="path" /> <br> <b>被包含进来的页面:</b> <bean:include id="page1" page="/include.jsp" /> <bean:write name="page1" filter="false" /> <hr> <h2> 用于定义或输出JavaBean的Bean标签 </h2> <hr> <b>定义并输出一个字符串:</b> <bean:define id="str1" value="中科软培训中心"></bean:define> <bean:write name="str1" /> <br> <% List list = new ArrayList(); list.add("red"); list.add("bule"); list.add("green"); pageContext.setAttribute("list", list); %> <b>输出数组<bean:write name="list" /> 的长度:</b> <bean:size id="listLength" name="list" /> <bean:write name="listLength" /> <hr> <p align="center"> <html:link forward="index">返回首页</html:link> </p> </body>
Logic标签库 Struts Logic标签库可以根据特定的逻辑条件来控制输出网页内容; 主要学习: • 进行字符串匹配的Logic标签; • 进行循环遍历的Logic标签; • 进行请求转发或者是重定向的Logic标签;
进行字符串匹配的Logic标签 比较运算: • <logic:equal>:判断是否等于; • <logic:notEqual>:判断是否不等于; • <logic:greaterEqual>:判断是否大于或等于; • <logic:greaterThan>:判断是否大于; • <logic:lessEqual>:判断是否小于或等于; • <logic:lessThan>:判断是否小于; 比较标签只能做变量和常量之间的比较,不能做变量和变量或常量和常量之间的比较; 属性: • Nama:指定要做比较的并存在于作用域中的变量名; • Value:指定常量值
进行字符串匹配的Logic标签 • <logic:match>:包含特定字符串; • <logic:notMatch>:不包含特定字符串; 作用:判断指定变量中是否包含指定常量; 属性: Name:存在作用域范围内的变量名; Value:常量值; Location:可选值只是start(判断指定变量是否以常开头)和end(判断指定变量是否以常结束);
进行字符串匹配的Logic标签 • <logic:empty>:是否为空或””; • <logic:notEmpty>是否不为空或””; 属性: Name:要判断的变量名;
进行循环遍历的Logic标签 <logic:iterate> 作用:是Logic标签库中最复杂的标签,也是用途最广的标签,他可以循环遍历数组,Collection,Enumeration,Iterator或Map中的所有元素; 属性: • Name:指定要进行遍历的集合对象; • Id:每次从集合中检索出一个元素,把他放到page范围中,并以id命名;
<logic:iterate>的属性 • indexId:定义一个代表当前被遍历元素序号的变量,存放在page范围内; • length:定义需要遍历的元素的数日; • Offset:指定开始遍历的起始位置;
进行请求转发或者是重定向的Logic标签 • <logic:forward>:进行请求转发; • <logic:redirect>:进行请求重定向;
<logic:forward>--进行请求转发 作用:用于转发一个请求; 属性 Name:指定struts-config.xml配置文件中的actionForward对象;
<logic:redirect>--进行请求重定向 作用:用于重定向请求; 属性 • Forward:指定配置文件里的actionForward对象; • Page:根据当前的相对URL路径; • Href:URL的绝对路径;
例:struts-02/LOGIC.jsp <body> <h2> 比较运算: </h2> <hr> <bean:define id="i" value="33"></bean:define> <logic:equal value="33" name="i"> i=33;<br> </logic:equal> <logic:lessThan value="34" name="i"> i<34<br> </logic:lessThan> <logic:greaterThan value="32" name="i"> i>32<br> </logic:greaterThan> i的值: <bean:write name="i" /> <br> <hr> <h2> 进行字符串匹配的Logic标签 </h2> <hr> <bean:define id="str" value="sinosoft.com.cn"></bean:define> <logic:match name="str" value="sinosoft"> <bean:write name="str" />中包含了字符串"sinosoft".<br> </logic:match> <logic:notMatch value="www" name="str"> <bean:write name="str" />中不包含字符串"www".<br> </logic:notMatch> <logic:notEmpty name="str"> <bean:write name="str" />不为null或""; </logic:notEmpty> <hr> <h2> 进行循环遍历的Logic标签 </h2> <% List list = new ArrayList(); list.add("red"); list.add("bule"); list.add("green"); pageContext.setAttribute("list", list); %> 我们有一个List对象: <bean:write name="list" /> <br> 遍历结果: <br> <logic:iterate id="element" name="list" indexId="id"> <bean:write name="id" />---<bean:write name="element" /> <br> </logic:iterate> <br> <br> <br> 从第二个元素开始遍历,遍历两个元素: <br> <logic:iterate id="element" name="list" indexId="id" offset="1" length="2"> <bean:write name="id" />---<bean:write name="element" /> <br> </logic:iterate> <br> <br> <br> 如果是嵌套List,我们也可以通过嵌套iterate进行遍历: <% list = new ArrayList(); list.add(new String[] { "a", "b", "c", "e", "f" }); list.add(new String[] { "1", "2", "3", "4", "5" }); pageContext.setAttribute("list", list); %> <br> 下面我们有一个嵌套List为: <bean:write name="list" /> ,我们的遍历结果为: <br> <logic:iterate id="cur" name="list" indexId="listId"> <bean:write name="listId" />---><bean:write name="cur" /> <br> <logic:iterate id="cur1" name="cur" indexId="stringId"> <bean:write name="listId" />---> <bean:write name="stringId" />---> <bean:write name="cur1" /> <br> </logic:iterate> </logic:iterate> <br> <br> <br> 如果我们要对一个Map对象进行遍历,我们可以通过bean:write的name和property属性来完成: <br> <% Map stus= new HashMap(); stus.put("0001","Jack"); stus.put("0203","Marry"); stus.put("0171","Jesson"); stus.put("8021","DoubleJ"); pageContext.setAttribute("stus",stus); %> 现在我们有一个Stus的Map对象: <bean:write name="stus" /> <br> 遍历结果: <br> <logic:iterate id="element" name="stus"> <bean:write name="element" property="key" />---><bean:write name="element" property="value" /> <br> </logic:iterate> <hr>
Nested标签库 Struts Nested标签库主要是表达JavaBean之间的嵌套关系,使用率不高,有需要自学一下!
总结 • Struts的标签库分那几类? • 每一类有那些标签? 作业: 把上课所有标签的作用和属性回家在JSP页面中作用一遍!