struts2个人学习笔记Word格式文档下载.docx
《struts2个人学习笔记Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《struts2个人学习笔记Word格式文档下载.docx(24页珍藏版)》请在冰点文库上搜索。
![struts2个人学习笔记Word格式文档下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/68a55457-9cd2-402f-93dc-7caf1f202668/68a55457-9cd2-402f-93dc-7caf1f2026681.gif)
success"
/result.jsp<
/result>
/action>
/package>
/struts>
Struts2的标签库
%@taglibprefix="
s"
uri="
/struts-tags"
%>
ActionSupport
的if("
hello"
.equals(this.getUsername().trim())&
&
"
.equals(this.getPassword().trim()))
尽量把常量写在前面,可以防止出现异常
验证
this.addFieldError("
username"
(要验证的字段),"
reuqeried"
);
Struts2的类型转换
继承DefaultTypeConverter类(针对实体类)
publicclassPointConverterextendsDefaultTypeConverter{
publicObjectconvertValue(Mapcontext,Objectvalue,ClasstoType){
if(Point.class==toType)
{
Pointpoint=newPoint();
String[]str=(String[])value;
String[]paramValues=str[0].split("
"
intx=Integer.parseInt(paramValues[0]);
inty=Integer.parseInt(paramValues[1]);
point.setX(x);
point.setY(y);
returnpoint;
}
if(String.class==toType)
Pointpoint=(Point)value;
intx=point.getX();
inty=point.getY();
Stringresult="
x="
+x+"
y="
+y;
returnresult;
returnnull;
}
}
point-conversion.properties(配置)
point=com.test.action.PointConverter;
Point2=com.test.action.PointConverter;
Point:
指的是action中的属性,也就是jsp页面中的变量
com.test.action.PointConverter转换器类
全局类型转换
xwork-conversion.properties;
com.test.action.point=com.test.action.PointConverter;
Com.test.action.point表示要转换的类
com.test.action.PointConverter表示转换器
StrutsTypeConverter的类型转换相应的properties做相应的修改
com.test.action.point=com.test.action.PointConverter2;
publicclassPointConverter2extendsStrutsTypeConverter{
publicObjectconvertFromString(Mapcontext,String[]values,ClasstoClass){
Pointpoint=newPoint();
String[]paramValues=values[0].split("
intx=Integer.parseInt(paramValues[0]);
inty=Integer.parseInt(paramValues[1]);
point.setX(x);
point.setY(y);
returnpoint;
publicStringconvertToString(Mapcontext,Objecto){
Pointpoint=(Point)o;
intx=point.getX();
inty=point.getY();
Stringresult="
+x+"
+y;
returnresult;
集合类型的转换(注意properties也要修改)这里要注意泛型
List<
Point>
list=newArrayList<
();
for(Stringvalue:
values)
String[]paramValues=value.split("
list.add(point);
returnlist;
list=(List<
)o;
StringBuildersb=newStringBuilder();
//非同步效率高
for(Pointpoint:
list)
sb.append("
).append(x).append("
y="
).append(y);
returnsb.toString();
Struts2验证
1.在action中实现validate()方法进行验证
publicvoidvalidate(){
if(null==username||username.length()<
6||username.length()>
10)
this.addFieldError("
"
出错提示信息"
遇到类型转换错误的时候(也就是说不能进行类型转换),struts2框架自动生成一条错误信息,并且将该错误信息放到addFieldError里面
constantname="
struts.custom.i18n.resources"
value="
message"
/constant>
替换struts标签的默认验证
在message.properties(全局)中设置
xwork.default.invalid.fieldvalue={0}error
来替换默认的struts标签的验证
要验证哪个action就要把其对应的资源文件放在对应的目录中那个
比如验证registerAction对应registerAction.properties
invalid.fieldvalue.age=ageerror(资源文件中的内容)
addActionError的用法
if(null==username||username.length()<
{
this.addActionError("
usernameerror"
由于jsp页面不会显示actionError错误信息所以,在页面要增加
s:
actionerror>
(默认只显示fieldError)
如果把<
formaction="
theme="
simple||ajax"
将不会显示表格
其他标签一样,几乎所有的标签都有一个theme属性
Struts1.0中的dispatchAction的处理模型在struts2中怎么处理
login!
add.action"
delete.action"
method="
add"
(这里是关键)>
Action中要有add方法,默认执行execute方法
那么对应于add方法的验证就是validateAdd()方法
验证execute一样是validateExecute()
Struts2的验证框架
为每个需要验证的action创建对应的action-validation.xml
有多少了这样的action就要建立多少了这样的validation.xml
文件头dtd
DOCTYPEvalidatorsPUBLIC"
-//OpenSymphonyGroup//XWorkValidator1.0.2//EN"
Field校验(字段校验),出错信息放在fieldError级别中,如果页面用<
actionError/>
将不会显示错误信息
fieldname="
field-validatortype="
requiredstring"
paramname="
trim"
true<
/param>
message>
usernameshouldnotbeblank!
/message>
/field-validator>
stringlength"
minLength"
6<
maxLength"
10<
usernameshouldbebetween${minLength}and${maxLength}<
/field>
password"
passwordshouldnotbeblank!
passwordshouldbebetween${minLength}and${maxLength}<
repassword"
repasswordshouldnotbeblank!
repasswordshouldbebetween${minLength}and${maxLength}<
age"
required"
ageshouldnotbeblank!
int"
min"
1<
max"
150<
ageshouldbebetween${min}and${max}<
birthday"
birthdayshouldnotbeblank!
date"
2001-01-01<
2003-12-31<
birthdayshouldbebetween${min}and${max}<
graduation"
graduationshouldnotbeblank!
2005-01-01<
2007-12-31<
graduationshouldbebetween${min}and${max}<
非字段校验
validatortype="
fieldName"
username<
/validator>
Struts2的客户端验证
1.form的theme不能设置为simple
2.Form的validate属性的值是true
(只做了解,最好不要使用)
为了解决action中多方法的校验要提供这样的
action-method-validation.xml文件
那么全局校验action-validation.xml是否提供自己注意,根据实际情况来定。
真正存放field级别错误信息的对象是LinkedHashMap
2.该LinkedHashMap的key是String类型的,value是ArrayList类型的
3.对于Action级别的错误信息,实际上是放置在ArrayList中的
设置断点debug调试
Validation.xml先执行,validate()方法后执行
Struts2的拦截器(intercepter)
拦截器的配置
如果action引用了自定义拦截器的话,默认的拦截器将不会执行,要执行默认的拦截器就必须也引入默认拦截器
login"
interceptor-refname="
interceptor"
/interceptor-ref>
defaultStack"
interceptors>
interceptorname="
com.intercepptor"
/interceptor>
/interceptors>
给拦截器赋值
aa"
aaa<
method="
<
bbb<
拦截器栈的定义
interceptor-stackname="
mystack"
bb"
aastack"
/interceptor-stack>
自定义拦截器要实现Interceptor接口或者AbstractInterceptor抽象类
方法拦截器MethodFilterInterceptor
自定义一个拦截器继承MethodFilterInterceptor
实现方法doIntercept();
myInterceptMethod"
includeMethods"
add,execute<
包含要拦截的方法
excludeMethods"
add<
不包含拦截的方法
拦截器实现权限验证
Mapmap=invocation.getInvocationContext().getSession();
if(map.get("
user"
)==null){
returnAction.LOGIN;
returninvocation.invoke();
创建session
Mapmap=ActionContext.getContext().getSession();
map.put("
aaa"
returnSUCCESS;
scripttype="
text/javascript"
functionadd()
vartd=document.getElementById("
more"
varbr=document.createElement("
br"
varinput=document.createElement("
input"
varbutton=document.createElement("
input.type="
file"
;
input.name="
button.type="
button"
button.value="
Remove"
td.appendChild(br);
td.appendChild(input);
td.appendChild(button);
button.onclick=function()
td.removeChild(br);
td.removeChild(input);
td.removeChild(button);
/scri