Structs2学习笔记.docx

上传人:b****5 文档编号:6850040 上传时间:2023-01-11 格式:DOCX 页数:46 大小:2.21MB
下载 相关 举报
Structs2学习笔记.docx_第1页
第1页 / 共46页
Structs2学习笔记.docx_第2页
第2页 / 共46页
Structs2学习笔记.docx_第3页
第3页 / 共46页
Structs2学习笔记.docx_第4页
第4页 / 共46页
Structs2学习笔记.docx_第5页
第5页 / 共46页
点击查看更多>>
下载资源
资源描述

Structs2学习笔记.docx

《Structs2学习笔记.docx》由会员分享,可在线阅读,更多相关《Structs2学习笔记.docx(46页珍藏版)》请在冰豆网上搜索。

Structs2学习笔记.docx

Structs2学习笔记

1.函数显示注释方法

Action

1.实现一个Action的最常用方式:

从ActionSupport继承

2.DMI动态方法调用!

3.通配符配置*{1}{2}…

a)*_*

4.接收参数的方法(一般用属性或者DomainModel来接收)

5.简单参数验证addFieldError

a)一般不使用Struts2的UI标签

6.访问Web元素

a)Map类型

i.IoC

ii.依赖Struts2

b)原始类型

i.IoC

ii.依赖Struts2

7.包含文件配置

8.默认action处理

2.structs2把请求与展现分开,请求与最后的结果分开

3、页面传值给action三种方法

传值1,/user属性下,user的action对应的add方法,name和age为对应的get后面的名字见下面

使用action属性接收参数

add?

name=a&age=8">添加用户

下面是对应struct配置文件的配置

/user_add_success.jsp

传值2,(域模型)/user属性下,user的action对应的add方法,user类对应的name和user类对应的age为对应的get后面的名字见下面

使用action属性接收参数

add?

user.name=a&user.age=8">

下面是对应struct配置文件的配置

/user_add_success.jsp

传值3,使用ModelDriven接收参数

add?

name=a&age=8">添加用户

/user_add_success.jsp

Struct2先创建new一个action,然后发下他实现了modeldriven接口,然后调用它的实现的model,有该model返回他调用的model,然后使用里面的get,set方法

4通配符配置

5,动态方法调用

6,

debug>

debug>标签里数据解释

7,多个submit提交。

从页面form单获取request、session、application给action

用户名:

密码:


document.f.action='login/login1';document.f.submit();"/>

document.f.action='login/login2';document.f.submit();"/>

document.f.action='login/login3';document.f.submit();"/>

document.f.action='login/login4';document.f.submit();"/>

效果如下:

1、后台action1(方法依赖于容器,或者是依赖于structs2的)

publicLoginAction1(){取map类型

request=(Map)ActionContext.getContext().get("request");

session=ActionContext.getContext().getSession();

application=ActionContext.getContext().getApplication();

}

publicStringexecute(){

request.put("r1","r1");

session.put("s1","s1");

application.put("a1","a1");

returnSUCCESS;

}

前台页面从action里获值第一种通过http协议的request、session、application获得(后台的值通过某种方把值赋给这三者)<%=request.getAttribute("r1")%>或者第二种标签法

propertyvalue="#request.r1"/>在StackContext里2取值。

#attr方法可以帮助你搜索request、session、application里的变量,但是这种方法不常用,因为程序员需要清除的知道自己想要的值被放到哪儿了。


propertyvalue="#request.r1"/>|<%=request.getAttribute("r1")%>

propertyvalue="#session.s1"/>|<%=session.getAttribute("s1")%>

propertyvalue="#application.a1"/>|<%=application.getAttribute("a1")%>

propertyvalue="#attr.a1"/>

propertyvalue="#attr.s1"/>

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1