StrutsHTML标签.ppt
第12章 Struts HTML标签库,12.1 用于生成基本的HTML元素的标签12.2 基本的表单标签12.3 检查框和单选按钮标签12.4 下拉列表和多选列表标签12.5 在表单中上传文件标签12.6 标签12.7 标签12.8 小结,前言,Struts标签可以和标准的HTML元素完成相同的功能.在Struts中提倡使用Struts标签,因为这些标签可以和Struts框架的其他组件紧密地联系在一起.Struts标签大致分为以下几类:用于生成基本的HTML元素的标签用于生成HTML表单的标签显示错误或正常消息的标签,12.1 用于生成基本的HTML元素的标签,Struts HTML标签库中的许多标签都和基本的HTML元素对应:,12.1.1 标签,用于在网页的开头生成常用属性:lang,用于显示用户使用语言,12.1.2 标签,生成标签用于生成当前网页的绝对URL路径,生成标签优点:允许在URL中以多种方式包含请求参数.当用户浏览器关闭Cookie时,会自动重写URL,把SessionID作为参数包含在URL中,用于跟踪用户的Session状态.标签的重要属性:forward:指定全局转发链接href:指定完整URL链接page:指定相对于当前应用的URL.,12.1.3 和标签,1.创建全局转发链接配置文件:jsp文件:注册2.创建具有完整URL链接 百度,和标签,用于输出超级链接中的URI部分,但它并不生成HTML元素.URI:指的是URL中协议、主机和端口以后的内容。URI用于指定具体的请求资源。如果需要将资源的URI传入到JavaScript函数中,使用非常有用.例:,在URL或URI中包含请求参数在URL或URI中包含单个请求变量在URL中的中的参数是当前面可访问的变量,可使用下面方法实现:MyJsp.jsp:URL Encode a parameter based on a string bean value 地址栏中结果:http:/localhost:8090/StrutsLogin/baseTag/MyJsp.jsp?urlParamName=value+to+Pass+URL,以JavaBean的属性作为请求变量 1.创建一个JavaBean:CustomerBean,添加一个属性 name.2.MyJsp.jsp中实现 URL Encode a parameter based on a customer bean value 地址栏中结果:http:/localhost:8090/StrutsLogin/baseTag/MyJsp.jsp?urlParamName=Tom,在URL或URI中包含多个请求变量MyJsp.jsp URL encode a parameter based on values in a Map地址栏结果:http:/localhost:8090/StrutsLogin/baseTag/MyJsp.jsp?myArray=str1&myArray=str2&myArray=str3&myString=myStringValue,JSP文件内容 生成的HTML标记,12.1.4 标签,12.2 基本的表单标签,Struts HTML标签库中提供了一组生成表单的标签:,12.2.6 标签,生成隐藏字段.两种方式:生成代码如下:(2)生成代码如下:propValue参考:htmltaglibs程序,12.3 检查框和单选按钮标签,Struts HTML标签库中提供了一组生成表单的标签:,12.4 下拉列表和多选列表标签,Struts HTML标签库中提供了一组生成表单的标签:,标签,属性:size:指定每次在网页上显示的可选项的数目 multiple:指定是否支持多选,true为选择列表.false为选择列表 property:与ActionFormBean中的某个属性对应,用来存放用户在列表上选中项的值.单情况下对应的是简单类型(非数组).多选情况下对应的是数组类型,以便存放用户选择的多个选项.城市:,属性:key,bundle 设置选项的资源文件.option中提示文本 value可以是具体的要提交的数据,也可以绑定资源文件.城市:北京上海,资源文件:city.beijing=beijingcity.shanghai=beijingcity.beijing.zh=u5317u4EACcity.shanghai.zh=u4E0Au6D77JSP:城市:,package com.sun.model;import java.sql.*;import java.util.*;import org.apache.struts.util.LabelValueBean;import com.sun.db.DBConnection;public class DepartmentDAO private Connection con=null;private Statement stmt=null;private ResultSet rs=null;public Collection getDepartemnts()Vector depts=new Vector();con=DBConnection.getConnectionForSQL();try stmt=con.createStatement();rs=stmt.executeQuery(select*from department);while(rs.next()depts.add(new LabelValueBean(rs.getString(dept_name),rs.getString(dept_id);catch(SQLException e)return depts;,部门:,12.5 在表单中上传文件标签,实现文件上传注意:必须嵌套在标签中标签的method必须是”POST”标签的编码类型enctype属性必须设为”multipart/form-data”标签必须设计property属性,这个属性和ActionForm Bean中FormFile类型的属性对应.,12.5.2 在ActionForm Bean中设置FormFile属性,import org.apache.struts.upload.FormFile;public class UserForm extends ActionForm public FormFile getFile()return file;public void setFile(FormFile file)this.file=file;,12.5.3 在Action类中处理文件上传,public class UserAction extends DispatchAction public ActionForward register()UserForm f=(UserForm)form;String dir=servlet.getServletContext().getRealPath(/photo);FormFile file=(FormFile)f.getFile();String fname=file.getFileName();InputStream streamIn;try streamIn=file.getInputStream();OutputStream streamOut=new FileOutputStream(dir+/+fname);int bytesRead=0;byte buffer=new byte8192;while(bytesRead=streamIn.read(buffer,0,8192)!=-1)streamOut.write(buffer,0,bytesRead);streamOut.close();streamIn.close();catch(Exception e),12.6 标签,标签能够格式化地显示ActionMessage对象包含的消息文本,而消息文本预存在Resource Bundle中.全局错误:集中显示错误字段级错误:,标签的用法,可以放在网页的任何地方,表单内外都可以.输出错误消息和它在网页中的位置无关.常用属性:name:property:消息属性,如果不设置将显示ActionMessages对象中所有的ActionMessage。bundle:指定Resource Bundle。如果此项没有设置,将从默认的Resource Bundle中获取消息文本。,显示全局消息,不和特定的表单字段关联的消息,消息属性为ActionMessages.GLOBAL_MESSAGE。在FormBean的validate()方法中生成全局消息。全局错误:JSP页面设置 formBean中validate()设置if(this.userName=null|this.userName.length()1)|(this.password=null|this.password.length()1)errors.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage(login.password.error2);return errors;,显示特定的消息,1.资源文件login.password.error1=Please enter a password!login.password.error2=u8BF7u8F93u5165u5BC6u7801!(请输入密码!)2.formBean中validate()方法if(this.password=null)|(password.length()html:password property=password/,在FormBean 中的代码:,public ActionErrors validate(ActionMapping mapping,HttpServletRequest request)ActionErrors errors=new ActionErrors();if(this.userName=null|this.userName.length()1)errors.add(userName,new ActionMessage(login.userName.error);/在1.1 有使用ActionError类 if(this.password=null)|(password.length()1)errors.add(password,new ActionMessage(login.password.error);return errors;,在Action类中使用:,1.在Action的execute()方法中写如下代码:execute()String badUserName=system;if(userName.equals(system)errors.add(userName,new ActionMessage(,badUserName);this.saveErrors(request,errors);return(new ActionForward(mapping.getInput();2.在资源文件中定义:hello.dont.talk.to.System=System dont logon!3.在jsp设置:或,12.7 标签,在网页输出消息1.资源文件:login.success=u767Bu5F55u6210u529FuFF01(登录成功)2.UserLoginAction中execute()方法中代码:if(login.validate()request.setAttribute(login,login);ActionMessages msg=new ActionMessages();msg.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage(login.success);this.saveMessages(request,msg);return mapping.findForward(success);else return mapping.findForward(failed);,12.8 小结,struts-config.xml,