Struts2 学习札记 NameSpace_Action_path_方法调用_ Wildcard_传参数

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里面去就好了