Struts2 学习札记 NameSpace_Action_path_方法调用_ Wildcard_传参数
NameSpace是action的访问路径
<package name="front" extends="struts-default" namespace="/front">
<action name="index">
<result>/Namespace.jsp</result>
</action>
</package>
<package name="main" extends="struts-default" namespace="">
<action name="index">
<result>/Namespace2.jsp</result>
</action>
</package>
第一个Action的访问路径为:http://localhost:8080/Struts2_0200_Namespace/front/index.action
第二个Action的访问路径为:http://localhost:8080/Struts2_0200_Namespace/faront/index.action
任何没有配Namespace 的action都会被第二个处理
Wildcard
<struts>
<constant name="struts.devMode" value="true" />
<package name="actions" extends="struts-default" namespace="/actions">
<action name="Student*" class="com.bjsxt.struts2.action.StudentAction" method="{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>
<!-- {0}_success.jsp -->
</action>
</package>
</struts>
调用方式 /actions/Studentadd /actions/Studentdelete 等等
Action:
第一中方式: 一个普通的Java类
第二种方式: public class IndexAction2 implements Action
第三种方式: public class IndexAction3 extends ActionSupport
一般用第三种。
public class IndexAction3 extends ActionSupport {
@Override
public String execute() {
return "success";
}
}
Path
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<base href="<%=basePath%>" />
<a href="index.jsp">index.jsp</a>
可以用相对路径代替绝对路径
如果没有<base href="<%=basePath%>" />
<a href="/index.jsp">index.jsp</a>
应该写绝对路径
方法调用有两种方式
第一种方式:指定方法名
第二种方式:动态的方法调用
<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>
第一种调用方式:/user/userAdd
第二种方式: /user/user!add
Java方法如下:
public class UserAction extends ActionSupport {
public String add() {
return SUCCESS;
}
}
传参数
参数自动匹配
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private String name;
private int age;
public String add() {
System.out.println("name=" + name);
System.out.println("age=" + age);
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
XML如下:
<struts>
<constant name="struts.devMode" value="true" />
<package name="user" extends="struts-default" namespace="/user">
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result>/user_add_success.jsp</result>
</action>
</package>
</struts>
调用方式:
http://localhost:8080/Struts2_0700_ActionAttrParamInput/user/user!add?name="zhangsan"&age=1
2 DomainModel
Action:
public class UserAction extends ActionSupport {
private User user;
//private UserDTO userDTO;
public String add() {
System.out.println("name=" + user.getName());
System.out.println("age=" + user.getAge());
return SUCCESS;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
User 类:
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
XML
<struts>
<constant name="struts.devMode" value="true" />
<package name="user" extends="struts-default" namespace="/user">
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result>/user_add_success.jsp</result>
</action>
</package>
</struts>
调用方式:
http://localhost:8080/Struts2_0800_DomainModelParamInput/user/user!add?user.name="zhangsan"&user.age=1
3 DTO
public class UserDTO {
private String name;
private String password;
private String confirmingPassword;
}
在Action里面接受参数的时候用的是UserDTO
http://localhost:8080/Struts2_0800_DomainModelParamInput/user/user!add?userDTO.name="zhangsan"&userDTO.age=1
从UserDTO里面拿出相应的参数填充到UserDTO里面去就好了