struts(3)
回顾:
1.ActionForm写法
a.属性(名字,类型)
b.配置
<form-bean name="" type="类名"/>
2.Action
a.1 execute(4)1
b.配置
<action path="/标识"
name=""
type="类名"
>
<forward name="" path="/"/>
</action>
新课
一.特殊的DispatchAction
1.DispatchAction可以处理多种业务请求.
a.一个public 类继承DispatchAction
b.提供多种处理业务请求的方法,方法格式与execute相同,但是方法名不能为execute.
c.配置
在行动方案中加入parameter="key名"
d.请求
path标识.do?key名=方法名
2.DispatchAction与Action的区别.
a.DispatchAction继承Action,其中Action的execute方法为空方法而DispatchAction对其进行了覆写,使得主控调用execute方法时,会根据请求中对应key的值(方法名)来进行请求的分发。
b.Action能做的事情,DispatchAction都能做,今后只用DispatchAction.
二.特殊的ForwardAction
1.仅需要配置,只完成转发动作.
2.保证所有的请求一律进主控,意味着所有页面的真实路径只在struts-config.xml中出现.
<action path="/标识" forward="/WEB-INF/jsp/****.jsp" />
三.特殊的ActionForm.
1.动态ActionForm.本质上ActionForm本身不提供任何数据,它是实体bean的容器。代码结构固定。
2.配置即可.格式为
<form-bean name="内部名" type="org.apache.struts.action.DynaActionForm">
<form-property name="item" class="entity.PetInfo"/>
</form-bean>
日期
java.sql.Date 1999-9-9 日历控件js
item.pet_name
http://localhost:8080/***/**.do?o=方法&item.pet_name=accp
调试(缩小范围)
3.在Action中取值
DynaActionForm df=(DynaActionForm)form;
(实体类的类名)df.get("属性名");
四.如何在Action中实现报错?
1.在Action中进行报错(编程的方式)
try{
调业务
....
//进入到下一个页面
return mapping.findForward("转发名");
}
catch(Exception e){
//报错
创建一个错误集合
ActionMessages errors=new ActionMessages();
创建一个错误消息
ActionMessage error=new ActionMessage ("key");
将错误存入集合
errors.add(null,error);
将错误集合存入共享范围
this.saveErrors(request.getSession(),errors);
}
//进入到显示错误的页面
return mapping.findForward("转发名");
2.在页面上显示错误消息
在页面上导入标签库
<%@ taglib prefix="html" uri="WEB-INF/struts-html.tld"%>
<html:errors/>
3.在ApplicationResources.properties文件中添加错误消息
key=value
error.login=js+css+html+内容
五.以声明的方式进行报错
1.在struts-config.xml中配置
<exception type="异常类名" key="资源文件中的key" path="/路径"/>
出现在<forward/>之前.
2.在报错的页面上
在页面上导入标签库
<%@ taglib prefix="html" uri="WEB-INF/struts-html.tld"%>
<html:errors/>
补充:
在资源文件中有两个保留的key不得随意使用.
errors.header=错误的头注
errors.footer=错误的脚注
从而实现报错风格的统一.
七.struts的标签
1.与表单有关的标签
<html:form>代替<form>,无method属性.
<html:text>代替<input type="text" >,将name属性换成property属性.
<html:radio>代替<input type="radio">......
<html:password>代替<input type="password">....
<html:select>代替<select>....
<html:option>代替<option>....
<html:textArea>代替<textArea>....
<html:checkbox> 代替单个<input type="checkbox">
<html:multibox>代替多个<input type="checkbox">
<html:form>与<form>的不同之处?
a.前者在服务器上执行,后者在浏览器上执行。
b.前者会在页面呈现之前,做
(1)检查表单的action指定的行动方案是否存在.
(2)在scope指定的范围内找attribute指定的bean是否存在,
有则重用,无则新建.
scope默认为session,attribute默认为name
(3)当页面呈现在游览器上时,会调用getter取值.
(4)当提交表单时,请求中的数据会进入FormBean,并转交给Action处理.
<html:multibox>对应多个复选框,其值为String[]
<html:checkbox>对应一个复选框,其值为boolean
默认选取中<html:checkbox>
(1)将对应的属性设定为true
(2)在页面中放一个同名的<html:hidden property="同名" value="false"/>
2.logic标签用于进行逻辑判断
<logic:notEmpty name="名字" scope="范围">
表示在指定的范围内找名字,若找到且不为null就执行标签体
</logic:notEmpty>
<c:if test="${名字!=null}">
</c:if>
<logic:equal name="名字" proeprty="属性" value="值">
表示若名字.属性==值就执行标签体
</logic:equal>
<c:if test="${名字.属性==值}">
</c:if>
<logic:iterate id="变量名" name="共享名">
对共享名指定的集合进行遍历操作
</logic:iterate>
<c:forEach var="变量名" items="${共享名}">
对共享名指定的集合进行遍历操作
</c:forEach>
3.bean标签
<bean:write name="共享名" property="属性"/>
${共享名.属性}
<c:set>
<bean:size>
- 1
- 2
前往页