**struts2 之 action**
开发中实现action的方法,一般只用这种方法:
struts2页面中一般都是用绝对路径
在页面中添加如下代码
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
然后在写路径是使用这样的格式 <a href="<%=basePath%>index.jsp"/>
或者
在head标签中添加base标签 <base href="<%=basePath%>"/> 这样在所有路径中会自动将basePath加到路径前面
动态调用acton方法,常用 !符号
例如连接中这样写...../ userAction!execute
通配符调用action *可以是任何字符
<action name="Student*" class="com.bjsxt.struts2.action.StudentAction" method="{1}">//{1}表示第一个*的字符添加到这里
<result>/Student{1}_success.jsp</result>
</action>
!!使用通配符 可是使配置文件比较简单
例如:
<action name="*_*" class="com.bjsxt.struts2.action.{1}Action" method="{2}">
<result>/{1}_{2}_success.jsp</result>
</action>
约定优于配置
类名,方法,result页面名称,约定好的话,struts配置文件会很简单!
action中接收页面传递的参数的方式:
1>在action中 设置同名的属性,并添加set get方法,struts会自动接收并赋值,以setXXX(), getXXXX() 方法中XXXX的名称为准.
2>使用domain model 域模型 在问题域中实际存在的模型
在jsp页面中
<a href="user/user!add?user.name=a&user.age=8">
当页面传递的参数与域模型,实体模型的属性不一一对应时,应当使用vo/do/dto模型接收页面传递的参数,处理之后根据这些模型生成实体类对象.
这里的vo/do/dto 只起到了数据传递的作用
3>模型驱动方式 ModelDriven action类implement ModelDriven<model class 例如:User>
action类中实现 public <model class> getModel()方法 { return user//这个名与action中的model类对象名相同}
源代码:
**struts 传递参数是中文乱码问题的解决
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.i18n.encoding" value="GBK" /> <!-- internationalization -->
<package name="user" extends="struts-default" namespace="/user">
<action name="userAdd" class="com.bjsxt.struts2.user.action.UserAction" method="add">
<result>/user_add_success.jsp</result>
</action>
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result>/user_add_success.jsp</result>
</action>
</package>
</struts>
简单数据校验
public String add() {
if(name == null || !name.equals("admin")) {
this.addFieldError("name", "name is error");
this.addFieldError("name", "name is too long");
return ERROR;
}
return SUCCESS;
}
错误页面:
<body>
User Add Error!
<s:fielderror fieldName="name" theme="simple"/>
<br />
<s:property value="errors.name[0]"/>
<s:debug></s:debug>
</body>
在action中得到访问web元素的request,session,application对象最常用的方式
默认的action
<struts>
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index"></default-action-ref>
<action name="index">
<result>/default.jsp</result>
</action>
</package>
</struts>
##Action总结##
1.实现action的最常用方式:从ActionSupport继承
2.DMI动态方法调用
3.通配符配置*_* {1}_{2}
4.接收参数的方法(!!一般使用action属性或者DomainModel来接收)
5.简单参数验证 addFieldErrro()方法
**一般不使用Struts2的UI标签,无法灵活处理错误信息
6.访问wed元素
7.包含文件配置 xml中 included 属性
8。默认action处理 struts.xml
*<default-action-ref name="actionName1">
即当无法找到对应的action时,执行actinName1这个action
**Struts2 之 Result**
Result的种类及使用:
<package name="resultTypes" namespace="/r" extends="struts-default">
<action name="r1">
<result type="dispatcher">/r1.jsp</result>//默认选项,为服务器端跳转,只能跳到html,jsp页面,不能跳到action
</action>
<action name="r2">
<result type="redirect">/r2.jsp</result>//客户端跳转,只能跳到视图,不能action
</action>
<action name="r3">
<result type="chain">r1</result>//访问action,注意前面最好不要加/,属于服务器端跳转
</action>
<action name="r4">
<result type="redirectAction">r2</result>//客户端直接跳转到action
</action>
</package>
前两个最常用!!
一包中的struts配置可以从另外一个包中继承,访问别的包的result
<struts>
<constant name="struts.devMode" value="true" />
<package name="user" namespace="/user" extends="struts-default">
<global-results>
<result name="mainpage">/main.jsp</result>
</global-results>
<action name="index">
<result>/index.jsp</result>
</action>
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result>/user_success.jsp</result>
<result name="error">/user_error.jsp</result>
</action>
</package>
<package name="admin" namespace="/admin" extends="user">
<action name="admin" class="com.bjsxt.struts2.user.action.AdminAction">
<result>/admin.jsp</result>
</action>
</package>
</struts>
<global-results> 所有action都可以用的result 例如错误页面跳转
<package name="user" namespace="/user" extends="struts-default">
<global-results>
<result name="mainpage">/main.jsp</result>
</global-results>
<action name="index">
<result>/index.jsp</result>
</action>
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result>/user_success.jsp</result>
<result name="error">/user_error.jsp</result>
</action>
</package>
带有参数的Result
struts.xml
<struts>
<constant name="struts.devMode" value="true" />
<package name="user" namespace="/user" extends="struts-default">
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result type="redirect">/user_success.jsp?t=${type}</result>
</action>
</package>
</struts>
action class
public class UserAction extends ActionSupport {
private int type;
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
@Override
public String execute() throws Exception {
return "success";
}
}
***一次请求,在服务器端跳转action时,各action共享页面传递来的的参数
***当在客户端跳转,2次请求时,如果希望得到前一次请求中action中的参数,需要在result中添加参数${参数名}例如:<result type="redirect">/user_success.jsp?t=${type}</result>
注意:此时,由于传递的参数是给一个jsp页面而不是action,所有没有valueStack,访问该参数不能像访问action给jsp页面传递的参数那样从valuestack中访问,需从parameters中访问,<s:property value="#parameters.t">
或者&& <%=request.getParameters("t")%>应该也可以!
##Result总结:##
Result种类:
1.默认为dispatcher
2.redirect
以上两种常用
3.chain
4.redirectAction
全局结果集:
global-results | extends
多个action共享一个result时,使用global-results ,当希望共享其他package里的global-results时,使用extends继承那个包
动态结果集,了解即可
在action设置一个属性,保存具体的result的值location,跳转的路径.然后在配置文件中使用${将该属性得到}
传递参数
a)客户端传递才需要
b)${}表达式不是el,${}从valuestack中取值
**Struts2 之 OGNL表达式**
**Struts2 之 struts标签**
1.通用标签:
a>property
b>set
i.默认为action scope,会将值放入 request 和 ActionContext中
ii.page,request,session,application
c>bean
d>include(对中文文件支持有问题,不建议使用,如需包含,改用jsp包含)
e>param
f>debug
2.控制标签
a>if elseif else
b>iterator
i.collections map enumeration iterator array
c>subset
3.UI标签
a>theme
i.simple xhtml(默认) css xhtml ajax
4.AJAX标签
a>补充
5.$#%的区别
a>$用于i18n 和 struts配置文件
b>#取得ActionContext的值
c>%将原来的文本属性解析为ognl,对于本来就是ognl的属性不起作用
i.参考<s:property>和<s:include>
分享到:
相关推荐
Struts2是一套非常优秀的Java WEB应用框架,...对于部分重要的知识点更是深入源代码进行剖析,而不是直接给出结论。 学习完本视频,你会真正理解Struts2相对于Struts1的优雅和简洁,并使你具备开发Struts2项目的能力。
同时也考虑到开发者在日后开发中可能遇到的问题,详细讲解了每个知识点的各种用法,本书覆盖到Struts 2近80%的API。因此,本书完全可以作为Struts 2框架的权威手册,以供开发者在实际开发过程中参考。 本书最后配备...
struts2的所有知识点 流程 原理 一个请求在Struts2框架中的处理大概分为以下几个步骤: 1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求; 2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个...
《Struts 2.1权威指南》是《Struts 2权威指南》的第二版,《Struts 2.1权威指南》介绍的...《Struts 2.1权威指南》第二版保留了第一版通俗易懂的写作风格:按Struts 2.1的架构体系,细致地介绍了Struts 2.1各个知识点。
同时也考虑到开发者在日后开发中可能遇到的问题,详细讲解了每个知识点的各种用法,本书覆盖到Struts 2近80%的API。因此,本书完全可以作为Struts 2框架的权威手册,以供开发者在实际开发过程中参考。 本书最后...
《Struts 2.1权威指南》特点为:1.经验丰富,针对性强 ...《Struts 2.1权威指南》最后配备了几个非常常见的案例,可以让读者在掌握前而的基础知识点的情况下,将所有知识融会贯通,把基础知识点应用项目开发过程中。
Struts2开发各个环节的详细讲解,非常实用,适合刚接触Struts2的人
本书所介绍的Struts 2已经完全超出了Struts 1框架原有的高度,Struts 2建立在Struts 1和WebWork两个...同时也考虑到开发者在日后开发中可能遇到的问题,详细讲解了每个知识点的各种用法,本书覆盖到Struts 2近80%的API
本书按Struts 2的架构体系,细致地介绍了Struts 2各个知识点。在介绍过程中, 笔者依照读者的学习规律,首先介绍基本概念和基本操作,然后对内容进行深入讲解。 笔者在介绍Struts 2框架时,既照顾到Struts 2初学者的...
本书按Struts 2的架构体系,细致地介绍了Struts 2各个知识点。在介绍过程中, 笔者依照读者的学习规律,首先介绍基本概念和基本操作,然后对内容进行深入讲解。 笔者在介绍Struts 2框架时,既照顾到Struts 2初学者的...
本书200mb,分的压缩包较多。...本书既给出Struts 2入门级的示范实例,也详细讲解了Struts 2各个知识点、各个选项的详细用法, 可以作为Struts 2框架的权威参考。 未传完,待。。。。。。。。。。。。。。
同时也考虑到开发者在日后开发中可能遇到的问题,详细讲解了每个知识点的各种用法,本书覆盖到Struts 2近80%的API。因此,本书完全可以作为Struts 2框架的权威手册,以供开发者在实际开发过程中参考。
本书为Struts 2.1所有知识点都配套了小案例让读者学以致用,然后详细介绍该知识点的各种选项和参数,再指出该知识点在实际开发中的应用场景,最后简要说明该知识点的底层运行机制。 除此之外,本书还有如下几个...
同时也考虑到开发者在日后开发中可能遇到的问题,详细讲解了每个知识点的各种用法,本书覆盖到Struts 2近80%的API。因此,本书完全可以作为Struts 2框架的权威手册,以供开发者在实际开发过程中参考。 本书最后配备...
同时也考虑到开发者在日后开发中可能遇到的问题,详细讲解了每个知识点的各种用法,本书覆盖到Struts 2近80%的API。因此,本书完全可以作为Struts 2框架的权威手册,以供开发者在实际开发过程中参考。 本书最后配备...