思路:
1.struts标签使用
2.BeanUtile的使用(实现转换器)
3.struts的国际化,和文件上传,同步令牌机制
4.知识点很零乱。要有选择的记忆!!学习方法很重要。
回显时标签的注意事项:
1. 复选框不再用checkbox
2. 下拉列表为optoins(注意,加了s)
struts的架构流程
* 引入jar包
* 配置web.xml文件
* 引入struts-config.xml(清仓处理)
* 定义customer.jsp
* 定义CustomerForm(没有属性)
* 定义action
* 配置struts-config.xml文件
* 测试运行
业务流程:
* 点击客户信息录入 ---- PreCustomerAction
* 在此action中查询数据库
* 转到customer.jsp
* 点击保存按钮插入-------customerSave
* 插入数据到数据库中
* 点击 "客户信息查询" customerList
* 查询所有的客户信息
新的标签:
源代码
<c:forEach items="${alllove}" var="love1">
<html:multibox property="love" value="${love1}"></html:multibox>
${love1}
</c:forEach>
转化后的代码
<input type="checkbox" name="love"(property="love") value="美容" (value="${love1}")>
美容(${love1})
<input type="checkbox" name="love" value="IT">
IT
<input type="checkbox" name="love" value="篮球">
篮球
源代码
collection="jobList"<Job> 表示一个集合,strurs的标签自己处理
property="jobid" javaBean中的属性
labelProperty="jobname" javaBean中的属性
<html:select property="job.jobid">
<html:options collection="jobList" property="jobid" labelProperty="jobname" />
</html:select>
转化后的代码
<select name="job.jobid" (property="job.jobid")>
<option value="1" (property="jobid" )>IT(labelProperty="jobname" )</option>
<option value="2">金融</option>
<option value="3">餐饮</option>
<option value="4">咨询</option>
</select>
//
struts的回显机制:
* 在显示要修改的信息时,请求到action,这是要使用name和scope属性
路径:
<a href="/itcast1130strutsunit01/customerEdit.do?method=edit&cid=3">
配置文件如下
<!-- 客户信息回显的Action -->
<action path="/customerEdit" name="customerForm" scope="request"
type="com.itcast.struts.action.CustomerAction" parameter="method">
<forward name="edit" path="/customerUpdate.jsp"></forward>
</action>
* 在action的edit方法中查询数据库返回一个javaBean对象
Customer c=customerService.findCustomerById(cid);
* 把查询到得jaavabean对象中属性的值拷贝ActionForm中(特殊的做处理),就可以了
* struts的在解析标签时候,回自动从actionForm取值,此时执行是get方法
//
Request.getAttribute(mapping.getAttribute()) //里面存放的是ActionForm的实例。默认的Name值是:action标签中的 name值。也就是说Request.setAttribute(name,actionForm); 这也就可以理解其内部是如何回显的了。
Struts处理表单重复提交的令牌机制:
利用sessionId和系统当前时间和md5加密之后再加移位算法,保证唯一行
转换器(BeanUtile工具类):
BeanUtils.copy
解决方法:自定义转换器(老佟讲过) 实现Converter接口 重写接口中的convert方法
注册转换器:再action实现类的静态代码块中中先注册转换器
Static{
ConvertUtils.register(new 转换器实例, java .util.Date.class 要转换的类型);
}
当使用BeanUtils.copyProperties()进行属性间赋值是,实际是吧信息放置到一个hasMap中map的key是转化数据类型的名称,value是转化器对象