处理请求的流程:
客户端通过浏览器发送一个请求,服务器由Struts的核心过滤器接受请求;查找struts.xml中,是否有对应的action,如果没有对应的action,则提示404的错误;如果找到了匹配的action,则创建action的代理;调用action中的set方法封装请求中的参数;调用action中execute()方法,根据execute()方法返回的字符串,查找struts.xml中对应的result,如果找不到匹配的result,则提示404错误;如果找到匹配的result,则跳转到result指定的页面;在页面上调用action的get方法进行一行数据的显示;将结果返回给客户端。
-
Struts2 标签库的使用
-
Struts2 标签库的分类
-
通用标签
-
控制标签
-
数据标签
-
-
UI标签
-
FORM 标签
-
非FORM标签
-
AJAX标签
-
-
导入struts的标签库
如果只是使用非AJAX类的标签,则只需要引入如下标签库:
<%@tagliburi="/struts-tags"prefix="s"%>
如果使用AJAX标签,则首先需要在项目中引入这个jar包;然后使用taglib指令导入struts的ajax标签库;
<%@tagliburi="/struts-dojo-tags"prefix="sd"%>
-
FORM 标签库的使用
1、form 标签的使用
-
<s:formaction="addUser"method="post"theme="xhtml">
</s:form>
action 属性:表示要将请求提交到那个action
method 属性:提交请求的类型;(get| post)
theme 属性:表示使用的主题;
xhtml :以表格的方式组织表单控件;
simple :没有使用任何样式组织表单元素;
ajax :ajax主题
-
textfield 标签的使用:用来生成HTML中的<inputtype="text" />控件
-
<s:textfieldid="userName"name="userName"label="用户名"
theme="xhtml"value="careers"tooltip="请输入用户名"/>
label 属性:用来生成控件前面的说明文字;
tooltip 属性:用来生成控件前面的提示图标;
注意:label、tooltip属性是建立在theme属性为xhtml的基础上的;
-
password 标签的使用:用来生成HTML中的<inputtype="password" />控件
-
<s:passwordid="userPwd"name="userPwd"label="密码"tooltip="请输入密码"
maxlength="15"value="123456"showPassword="true"/>
maxlength 属性:指定允许输入的最大字符个数;
value 属性:struts2默认对于密码框,设置value属性是不生效的,只有将showPassword属性设置为true时,密码框中才会显示值;
-
select 标签的使用:用来生成HTML中的<select>控件
-
<s:selectlist="{'北京','天津','上海'}"label="城市"
name="address"headerKey="0"headerValue="请选择..."/>
list属性:指定你使用那一个集合生成select的<option>选项
headerKey 属性:指定第一个下拉列表项(option)对应的value属性;
headerValue 属性:指定第一个下拉列表项显示的内容;
-
<s:selectlist="#{'10':'教学部','20':'市场部','30':'研发部'}"
value="'20'"listKey="key"listValue="value"name="dept"label="部门"/>
list 属性:可以指定一个map集合
listKey 属性:用来指定生成的下拉列表项(option)的value属性对应"集合"中那一个属性;
listValue 属性:用来指定生成的下拉列表项的展示内容对应"集合"的那一个属性
value 属性:指定默认显示那一个下拉列表项
-
radio 标签的使用:用来生成HTML中的<inputtype="radio" />控件
-
<s:radiolist="{'男','女','保密'}"name="gender"label="性别"/>
-
<s:radiolist="#{'m': '男', 'f' : '女','s' : '保密'}"value="'s'"
listKey="key"listValue="value"name="sex"label="性别"/>
value 属性:用来指定默认选中那一个
-
checkboxlist 标签的使用:用来生成一组<input type="checkbox" />控件
-
<s:checkboxlistlist="#{'001': '篮球','002': '足球','003':'排球'}"
name="hobby"label="兴趣"value="{'001','002'}"/>
-
checkbox 标签的使用:用来生成一个<inputtype="checkbox" />控件
-
<s:checkboxname="agree"label="同意"key="0"/>
-
textarea 标签的使用:用来生成<textarea/>控件
-
<s:textareaname="description"label="简介"
rows="5"cols="40"/>
-
submit 标签的使用:用来生成<input type="submit" />控件
-
<s:submitvalue="添加用户"/>
注意:除非你要在后台应用程序中接受按钮的值,否则不要给按钮添加name属性;因为struts会对请求中每一个参数去调用对应的setXx方法进行封装值;如果找不到对应的setXx方法,后台就会报错;
-
AJAX标签之datatimepicker的使用
-
配合<sd:head/>使用
<sd:datetimepickername="birthday"label="出生日期"
displayFormat="yyyy/MM/dd"/>
-
数据标签的使用
作用:专门用来在页面输出各种对象范围内的值;替换el表达式
1、property标签的使用
-
<s:propertyvalue="userName"/>
value属性指定你要显示的值的属性名称
2、date标签的使用
-
<s:datename="birthday"format="yyyy-MM-dd"/>
name 属性指定你要显示的值的属性名称
-
控制标签
-
选择结构标签的使用
-
<s:iftest="userName== 'careers'">
普通用户
</s:if>
<s:elseiftest="userName== 'admin'">
管理员
</s:elseif>
<s:else>
不是合法用户
</s:else>
test 属性:需要指定一个布尔类型的值;
-
循环结构标签的使用
-
<s:iteratorvalue="#request.users"var="user"
begin="2"end="8"step="2"status="st">
<s:propertyvalue="#st.index"/>
<s:propertyvalue="#user.name"/>
<s:propertyvalue="#user.age"/>
<s:propertyvalue="#user.email"/><br/>
</s:iterator>
value 属性,指定你要遍历那一个集合;
var 属性,指定你从集合出取出一个对象的名字;
begin 属性,指定从第几个开始遍历(默认从0开始);
end 属性,指定遍历到第几个结束;
step 属性,指定遍历时,每次走多少步;
status 属性,用来标识遍历的状态;
-
OGNL(ObjectGraph Navigation Language)表达式:对象图导航语言
OGNL 维护了一个context map;
-
创建数组
语法:{ele1,ele2}
-
创建Map
语法:#{key1: value1,key2 : value2}
示例:#{'10': '教学部', '20' : '市场部', '30' : '研发部'}
-
使用OGNL表达式取得各个对象范围内的值
1)取得root部分的值(Action中的属性值),在取值是不需要加#;
例如:<s:propertyvalue="userName" />
-
取得非root部分的值(如request,session,application等),在取值时,需要加#
例如:取得request范围内name属性;
<s:property value="#request['name']" />
或
<s:property value="#request.name" />
取得session范围内的属性值
<s:property value="#session.sessionName" />
-
% 运算:强制将字符串看成是OGNL表达式;专门用来取值;
<s:textfieldname="userName"value="%{userName}"/>
补充:将取得的值放到表单控件中
1)普通的HTML控件
<inputtype="text"value="<s:propertyvalue='userName'/>"/>
-
表单控件是用struts提供的标签完成的
<s:textfieldname="userName"value="%{userName}"/>