Struts1的html标签主要是为了绘制HTML页面标签元素,通过与Struts1框架的集成,增强功能
首先,在使用前,需要引入tld文件
<%@ taglib prefix="html" uri="http://struts.apache.org/tags-html" %>
标签详细讲解
html:link 对应<a>标签
首次打开,会自动生成jsessionid,如果浏览器支持cookie,会自动将jsessionid添加到cookie中,下次访问不会再次添加jsessionid了,jsessionid相当于session的一个标志。用于会话跟踪
能够对参数进行url编码,并且自动为请求添加请求后缀,如.do,.action等
1 <% 2 Map<String,String> parMap = new HashMap<>(); 3 parMap.put("x","1"); 4 parMap.put("y","2"); 5 parMap.put("z","3"); 6 request.setAttribute("parMap",parMap); 7 Date now = new Date(); 8 request.setAttribute("now",now); 9 request.setAttribute("name","张三李四咯"); 10 %> 11 <%--参数名为username,从web作用域中查找名为name的值--%> 12 <html:link action="/regUser" paramId="username" paramName="name">注册 - 对参数URL编码</html:link><br/> 13 <html:link action="/regUser" paramId="t" paramName="now" paramProperty="time">对象的某个属性作为参数</html:link><br/> 14 <html:link action="/regUser" name="parMap">Web作用域中的Map作为参数集合</html:link><br/> 15 如果需要设置的请求参数是某个对象的Map类型成员变量,则可以使用 name+property两个属性进行设置 16 对于生成的请求地址,会自动添加项目名与请求后缀 17 例如:<html:link action="/regUser">注册</html:link>
html:select 对应 select标签
html:option 生成一个option元素
html:options 生成多个option标签
html:optionsCollection 生成多个option标签
<html:select property="regUser.gender"> <c:forEach items="${requestScope.genders}" var="genderAttr"> <!-- 因为html:option只能生成一个下拉框,所以需要迭代 --> <html:option value="${genderAttr.value}" key="${genderAttr.key}"/> </c:forEach> </html:select> <html:select property="regUser.gender"> <html:options collection="genders" labelProperty="value" property="key"/> </html:select> <html:select property="regUser.gender"> <html:optionsCollection name="genders" label="value" value="key"/> </html:select> 说明:regUser.gender 表示提交的请求中接收参数的变量;genders是上一个Action中传递过来的下拉列表对象;value用于显示; key作为传递值 value与key是不固定的。都是genders集合对象中的变量
对于html:options,还有一种用法
<% List colorList = new ArrayList(); colorList.add(new LabelValueBean("Red", "1"); colorList.add(new LabelValueBean("Blue", "2"); %> <html:select property="testProperty"> <html:options collection="colorList" property="label" labelProperty="value"/> </html:select>
html:rewrite 生成一个指向Action的请求地址,自动添加请求后缀与项目名称地址
<form action="<html:rewrite action='/regUser'/> " method="post"> 等价于 <form action="${pageContext.request.contextPath}/regUser.do" method="post">
html:submit 表单提交按钮
属性指定鼠标上移提示信息,bean:message指定按钮上的文字,都实现了国际化 <html:submit titleKey="info.submit" bundle="message"> <bean:message bundle="message" key="info.submit"/> </html:submit>
html:error 错误信息的输出
<html:errors /><br/><!-- 输出全部ActionErrors信息 --> <html:errors property="username"/><!-- 输出指定key的错误信息,注意这里的key不是资源包中的key --> 其实所谓的输出错误信息,就是从 web 作用域中获取 键 为 public static final String ERROR_KEY = "org.apache.struts.action.ERROR"; 的数据
html:message 输出普通信息
public static final String MESSAGE_KEY = "org.apache.struts.action.ACTION_MESSAGE"; 获取Web作用域中此 键 对应的值
html:form 生成表单
Action属性值会自动添加项目名与请求后缀
html:text 表单文本输入域
<html:text property="regUser.username"/>
html:password 表单密码输入
<html:password property="regUser.password" value=""/>
html:cancel 取消
<html:cancel>取消</html:cancel>
html:checkbox 一个选择框
java:private boolean autoLogin; jsp:<html:checkbox property="autoLogin">两周内自动登录?</html:checkbox> 注意在ActionForm中使用reset方法将autoLogin初始化为false 之所以要这么做,是因为如果未对复选框进行勾选,默认并不是传递false,而是传递原先的值。这就导致永远为true,所以需要reset为false 如果ActionForm的作用域是request,则可以不reset,因为每次请求都是一个新的FormBean
html:multibox 复选框
与checkbox的区别在于,checkbox对应的是JavaBean中的boolean类型,multibox对应的是JavaBean中的String[]类型 一般,如果需要接收的参数是一个布尔值类型,会使用html:checkbox,如果需要接收的参数是一组数据,就会采用html:multibox <html:multibox property="regUser.specialities"/> 两种复选框标签都有回显功能 一般会使用循环迭代生成一组复选框标签 <c:forEach items="${requestScope.specialities}" var="att"> <html:multibox property="regUser.specialities" value="${att.id}"/>${att.value} </c:forEach>