1、配置Struts2的开发模式
<constantname="struts.devMode"value="true"/>
2、Struts的action
具体视图的返回可以由用户自己定义的Action来决定
具体的手段是根据返回的字符串找到对应的配置项,来决定视图的内容
具体Action的实现可以是一个普通的java类,里面有publicString execute方法即可
或者实现Action接口
不过最常用的是从ActionSupport继承,好处在于可以直接使用Struts2封装好的方法
3、路径问题
struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
虽然可以用redirect方式解决,但redirect方式并非必要。
解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径)
或者使用myeclipse经常用的,指定basePath
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<basehref="<%=basePath%>"/>
4、ActionMethod_DMI_动态方法调用
Action执行的时候并不一定要执行execute方法
可以在配置文件中配置Action的时候用method=来指定执行哪个方法
也可以在url地址中动态指定(动态方法调用DMI)(推荐)
<a href="<%=context %>/user/userAdd">添加用户</a>
<a href="<%=context %>/user/user!add">添加用户</a>
前者会产生太多的action,所以不推荐使用
<packagename="user"extends="struts-default"namespace="/user">
<actionname="userAdd"class="com.bjsxt.struts2.action.UserAction"method="add">
<result>/user_add_success.jsp</result>
</action>
<!--推荐方式使用DMI访问时使用user!add方式 -->
<actionname="user"class="com.bjsxt.struts2.action.UserAction">
<result>/user_add_success.jsp</result>
</action>
</package>
5、ActionWildcard_通配符配置
使用通配符,将配置量降到最低<br/>
<ahref="<%=context %>/actions/Studentadd">添加学生</a>
<ahref="<%=context %>/actions/Studentdelete">删除学生</a>
不过,一定要遵守"约定优于配置"的原则
<ahref="<%=context %>/actions/Teacher_add">添加老师</a>
<ahref="<%=context %>/actions/Teacher_delete">删除老师</a>
<ahref="<%=context %>/actions/Course_add">添加课程</a>
<ahref="<%=context %>/actions/Course_delete">删除课程</a>
<!--路径匹配时,会先匹配精确的,带*号为同一级别,按先后顺序 -->
<packagename="actions"extends="struts-default"namespace="/actions">
<actionname="Student*"class="com.bjsxt.struts2.action.StudentAction"method="{1}">
<result>/Student{1}_success.jsp</result>
</action>
<actionname="*_*"class="com.bjsxt.struts2.action.{1}Action"method="{2}">
<result>/{1}_{2}_success.jsp</result>
</action>
</package>
6、接受参数:用Action的属性接收参数和用DomainModel接收参数和用ModelDriven接收参数
使用属性接收参数,即在action里面设置一个属性,struts会调用该属性的set方法设置属性值
使用DomainModel接收参数,即在action设置一个对象如user,通过user.username=test&user.age=18来设置属性值
用ModelDriven接收参数
7、使用addFieldError方法和s:fieldError标签简单处理数据校验
在Action中添加Error
//添加FieldError测试简单数据校验
if(null !=name&& !"admin".equals(name)){
this.addFieldError("name", "name mustbetween 6~12.");
this.addFieldError("name", "name isillegal!");
return ERROR;
}
在JSP中显示Error
<s:fielderror fieldName="name"></s:fielderror><br/>
<s:property value="errors.name[0]"/>
<s:debug></s:debug>
8、Struts2模块包含
Struts.xml
<?xmlversion="1.0" encoding="UTF-8" ?>
<!DOCTYPE strutsPUBLIC
"-//Apache Software Foundation//DTDStruts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constantname="struts.devMode" value="true" />
<include file="login.xml"/>
</struts>
Login.xml
<?xmlversion="1.0" encoding="UTF-8" ?>
<!DOCTYPE strutsPUBLIC
"-//Apache Software Foundation//DTDStruts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="login"extends="struts-default" namespace="/login">
<action name="login*"class="com.bjsxt.struts2.user.action.LoginAction{1}">
<result>/user_login_success.jsp</result>
</action>
</package>
</struts>
9、默认Action
当访问的URL在某个namespace下不存在时,会交给默认Action去处理
<default-action-refname="index"></default-action-ref>
10、Struts2结构类型
Ⅰ. 常用四种类型:
a) dispatcher(默认)
b) redirect
c) chain
d) redirectAction
Ⅱ.全局结果集
a) global-results | extends
Ⅲ. 动态结果(了解)
a)在action中保存一个属性,存储具体的结果location
在struts.xml中可以通过<result>${r}</result>取得action中的属性,这样就可以动态生成result
Ⅳ. 传递参数
a)客户端跳转才需要传递
b) ${}表达式(不是EL)
同一个request共享同一个valueStack
访问action会建立valueStack值栈,而访问jsp不会建立