一.struts的配置
1.web.xml的配置
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
//接受各种以.do结尾请求的ActionServlet
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
//可以配置Struts配置文件的文件名,支持多个配置文件
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup> //以最快速度初始化ActionServlet
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
//运行原理
首先由浏览器提交表单映射到相应的以.do结尾的ActionServlet路径,再根据这个路径找到ActionServlet,再由ActionServlet根据这个路径初始化struts-config.xml,这样ActionServlet就将用户提交的表单信息填充到了相应的
ActionForm,然后ActionServlet再将http请求转发到相应的action处理;
2.struts-config.xml的配置
struts-config.xm的根元素标签
<struts-config>
在这个标签里面主要有两个标签:
<form-beans>
在这个标签里只有一个标签:
<form-bean name="" type="" /> //name代表ActionForm的一个被实例化的名字,type代表这个ActionForm的类型
假若这是一个动态FormBean,那么这个form-bean标签必须写成容器标签:
<form-bean name="userDynaForm" type="org.apache.struts.action.DynaActionForm">
//name为DynaActionForm的一个对象名,type为DynaActionForm的类型,是固定的
<form-property name="uid" type="java.lang.Integer" />
//这个标签代表设置这个DynaActionForm的属性
</form-bean>
</form-beans>
和一个容器标签
<action-mappings >
<action
attribute="" //为某个ActionForm对象设置范围属性
input="" //填充到某个ActionForm的数据来源
parameter= "" //代表一个DispatchAction的接收参数,这个参数的值就是这个DispatchAction的一个具体的方法名
name="" //必须和某个ActionForm对象名完全相同
path="" //代表这个action映射的一个请求路径
scope="" //设置某个ActionForm对象的范围
validate="" //表示是否对表单进行验证,true代表是,false代表不是
type="" > //代表这个action的类型
<forward name="" path="" /> //表示这个action处理完客户请求时转发的页面
</action>
</action-mappings >
</struts-config>
二.动态FormBean使用
1.首先是formBeans标签的配置问题
在这个标签里面的一个formBean标签得改成容器标签了,如下:
<form-bean name="form" type="org.apache.struts.action.DynaActionForm"> //name为DynaActionForm的一个对象名,type为DynaActionForm的类型,是固定的
<form-property name="user" type="java.lang.String"></form-property> //这个标签代表设置这个DynaActionForm的属性,必须和表单元素对应
</form-bean>
2.其次是在action这个类中获取动态FormBean中的属性值
有两种方法
(1)DynaActionForm 的get(String name),这种方返回Object类型的数据,还需强制转换;
(2)DynaActionForm 的getString(String name),这种方法返回String类型的数据,方便快捷;
注:这两种方法里面的参数必须和DynaActionForm的属性名对应
三.使用实体对象作为Form属性
1.首先在form类中声明一个具体的实体对象.如:声明一个用户实体对象:User user = new User();
2.再在form类中写好实体类的get和set方法.
3.在客户端表单元素中的名字必须写成user.userName、user.password;
四.struts标签
1.html标签:
(1)该标签的导入有两种方式:<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>和
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %> 效果一样
(2)表单标签种类:
文本框:<html:text property="" />
密码框:<html:password property="" />
单选框:<html:radio property="" value=""/> //value属性必须要
复选框:<html:checkbox property="" value=""/>
隐藏框:<html:hidden property="" value=""/>
文件选择框:<html:file property="" value=""/>
下拉列选框:<html:select property="">
<html:option value=""></html:option>
<html:optionsCollection name="" label="" value=""/> //name指明某个设置到request或者session对象范围中的对象,label代表显示在客户端的文本,value代表选项值;
</html:select>
多行文本框:<html:textarea property="" value="" /> //value代表其中的内容
注意:上面所有标签的property属性均指html表单中的name属性
2.Logic:empty标签:
<logic:empty name="user" scope="session"> //<logic:empty>:判断指定的变量是否为null,或者为空字符串
<span οnclick="alert('请先登录') ">高级搜索</span>
</logic:empty>
<logic:notEmpty name="user" scope="session"> //<logic:notEmpty>:判断指定的变量不为null,并且不为空字符串
<span οnclick="switch('advSearch')">高级搜索</span>
</logic:notEmpty>
3.bean:define标签:
<bean:define id="allSearchResult" name="allSearchResult" type="java.util.List" scope="request"/>
//id代表name属性指代的对象的一个别名,定义好后,就可以在java代码中直接使用id别名
//name指代被设置到scope范围中的对象
//type指代该对象的类型
4.logic:iterate标签:
<logic:iterate id="film" name="currentSearchResult">
//name指代被设置到request或session中的对象,该对象必须是Set或List等集合类型
//id指代这个集合中的其中一个元素,并为该元素命名为film
影片名:<bean:write name="film" property="filmName"/><br>
//该标签用于向客户端输出内容
//name指代集合中的一个值,即是logic:iterate中的id属性对应的值
//property指代对象film的下一个属性值
影片封面:<br><img src="imgs/filmImgs/<bean:write name="film" property="imgUrl"/>" width=130 height=190><br>
//这里在img标签中嵌套bean:write标签
影片演员:<logic:iterate id="actorFilm" name="film" property="ticketActorFilms">
//property指代name对象film的下一属性,该属性是一个Set类型的元素,所以同样返回到logic:iterate标签中
//id在这里指代film对象的下一属性集合中的其中一个对象
<bean:write name="actorFilm" property="id.ticketActor.actorName"/>
//需要涉及到属性的下一属性的下一属性时,就在属性之间以"点"隔开
</logic:iterate>
</logic:iterate>