propertyvalue="#attr.r1"/>
debug>
debug>
2、后台action2(Ioc)(最常用)
publicclassLoginAction2extendsActionSupportimplementsRequestAware,SessionAware,ApplicationAware{
取map类型
privateMaprequest;
privateMapsession;
privateMapapplication;
//DIdependencyinjection(依赖注入)
或者称为IoCinverseofcontrol(控制反转本来自己控制初始化,现在由别人控制初始化)
publicStringexecute(){
request.put("r1","r1");
session.put("s1","s1");
application.put("a1","a1");
returnSUCCESS;
}
@Override(被初始化)
publicvoidsetRequest(Maprequest){
this.request=request;
}
@Override(被初始化)
publicvoidsetSession(Mapsession){
this.session=session;
}
@Override(被初始化)
publicvoidsetApplication(Mapapplication){
this.application=application;
}
}
下图为上程序解释:
3、后台action4(Ioc)取真实值类型方法
publicclassLoginAction4extendsActionSupportimplementsServletRequestAware{
privateHttpServletRequestrequest;
privateHttpSessionsession;
privateServletContextapplication;
publicStringexecute(){
request.setAttribute("r1","r1");
session.setAttribute("s1","s1");
application.setAttribute("a1","a1");
returnSUCCESS;
}
@Override
publicvoidsetServletRequest(HttpServletRequestrequest){
this.request=request;
this.session=request.getSession();
this.application=session.getServletContext();
}
}
8、用于包含已配置好的另一个.xml文件
Result
1.常用四种类型:
(服务器跳转forword显示action间的地址,客户端跳转redirect显示jsp的地址)
a)dispatcher(默认)
b)redirect
c)chain
d)redirectAction
2.全局结果集
a)global-results|extends
3.动态结果(了解)
a)在action中保存一个属性,存储具体的结果location
4.传递参数
a)客户端跳转才需要传递
b)${}表达式(不是EL)
9、里extends用法及的用法
/main.jsp
/index.jsp
/user_success.jsp
/user_error.jsp
/admin.jsp
10、request只产生一个值栈,forword使用共同的一个值栈。
页面间跳转没有action则值栈为空,想用传过来的参数可以用stackcontext里的元素取值。
11、两种访问action并且传值给action的超链接方法
/ognl.action?
username=u&password=p">ognl
username=u&password=p">ognlognl
12、在Action中取得页面表单数据
在Struts1.x中表单的数据是通过为配置ActionForm来加载的,而在Struts2.0表单数据的输入将变得非常方便,和普通的POJO一样,在Action编写Getter和Setter,然后在JSP的UI标志的name与其对应,在提交表单到Action时,我们就可以取得其值。
假如有如下的一个请求表单:
配置的映射如下:
welcome.jsp
login.jsp
该表单提交后就会找到LoginAction.java的处理类,那么此时我们需要在该类中添加与各输入表单名称对应的变量名,并添加getter/setter方法,这样表单的值就会自动被注入到LoginAction.java类中,此时的类代码如程序24-5所示。
程序24-5 在Action中取得表单数据
publicclassLoginAction{
privateStringusername;
privateStringpassword;
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
publicStringexecute()throwsException{
return"success";
} }
此时我们就可以在execute()函数中取得username和password的数值了。
OGNL
1.ObjectGraphNavigationLanguage
2.想初始化domainmodel,可以自己new,也可以传参数值,但这时候需要保持参数为空的构造方法
3.其他参考ognl.jsp
4.什么时候在stack中会有两个Action?
答:
当使用chain时
13、页面如何取值栈里的值,action传值到页面,页面如何取
访问值栈中的action的普通属性:
username=propertyvalue="username"/>
(1)值栈中对象的普通属性
访问值栈中对象的普通属性(getset方法):
propertyvalue="user.age"/>|propertyvalue="user['age']"/>|propertyvalue="user[\"age\"]"/>|wrong:
<%--propertyvalue="user[age]"/>--%>
访问值栈中对象的普通属性(getset方法):
propertyvalue="cat.friend.name"/>
访问值栈中对象的普通方法:
propertyvalue="password.length()"/>
访问值栈中对象的普通方法:
propertyvalue="cat.miaomiao()"/>
访问值栈中action的普通方法:
propertyvalue="m()
访问静态方法:
propertyvalue="@com.bjsxt.struts2.ognl.S@s()"/>
访问静态属性:
propertyvalue="@com.bjsxt.struts2.ognl.S@STR"/>
访问Math类的静态方法:
propertyvalue="@@max(2,3)"/>
两个@只能访问这一种方法max(2,3)
访问普通类的构造方法:
propertyvalue="newcom.bjsxt.struts2.ognl.User(8)"/>
访问List:
propertyvalue="users"/>
(2)list,数组
访问List中某个元素:
propertyvalue="users[1]"/>
访问List中元素某个属性的集合:
propertyvalue="users.{age}"/>
访问List中元素某个属性的集合中的特定值:
propertyvalue="users.{age}[0]"/>|propertyvalue="users[0].age"/>
List的访问方式和数组的访问方式相同,所以可以参见:
propertyvalue="users[1]"/>的方式。
{}可以表示一个集合
(3)set
访问Set:
propertyvalue="dogs"/>
访问Set中某个元素:
propertyvalue="dogs[1]"/>
Set中是没有顺序的,所以value="dogs[1]”的方式是取不到值的
访问Map:
propertyvalue="dogMap"/>
(4)map
访问Map中某个元素:
propertyvalue="dogMap.dog101"/>|propertyvalue="dogMap['dog101']"/>|propertyvalue="dogMap[\"dog101\"]"/>
访问Map中所有的key:
propertyvalue="dogMap.keys"/>
访问Map中所有的value:
propertyvalue="dogMap.values"/>
访问容器的大小:
propertyvalue="dogMap.size()"/>|propertyvalue="users.size"/>
^代表开头{^#this.}取出开头的一个集合,$取出结尾的一个集合
投影(过滤):
propertyvalue="users.{?
#this.age==1}[0]"/>
投影:
propertyvalue="users.{^#this.age>1}.{age}"/>
投影:
propertyvalue="users.{$#this.age>1}.{age}"/>
投影:
propertyvalue="users.{$#this.age>1}.{age}==null"/>
[]:
propertyvalue="[0].username"/>
14、iterator
(1)遍历集合:
iteratorvalue="{1,2,3}">
property/>|
iterator>
(2)自定义变量:
iteratorvalue="{'aaa','bbb','ccc'}"var="x">
propertyvalue="#x.toUpperCase()"/>|
iterator>
(3)使用status:
status是表示当前的循环状态下的状态
iteratorvalue="{'aaa','bbb','ccc'}"status="status">
property/>|
遍历过的元素总数:
propertyvalue="#status.count"/>|
遍历过的元素索引:
propertyvalue="#status.index"/>|
当前是偶数?
:
property