struts2-action

Action总结:
1.实现一个Action的最常用的方式,继承ActionSupport
2.DMI方法调用
3.通配符配置*_* {1} {2}
4.接收参数的方法(一般用属性或者DomainMode来接收)
5.简单数据验证addFieldError
   a)一般不使用Struts2的UI标签
6.访问Web元素
   a)Map类型
7.包含文件配置
8.默认Action处理
 
 
<constant name="struts.devMode" value="true" />
    <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>/Namespace.jsp</result>
        </action>
</package>

 

package 中的name用来解决action重名的现象(例如:前台和后台都有相同名字的action,这个时候就可以用package做区分)

1.namespace

namespace决定了action的访问路径,默认为"",可以接受所有路径的action

namespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/index.action,/xxx/index.action,或者/xxx/yyy/index.action

namespace最好用模块来进行命名

2.copy  web project时容易出现的问题

要对copy以后重命名的project,右键,选择Properties,进行如下图配置:

3.import web project时需要注意的问题

JRE System Library可能需要remove,然后重新给项目bulid path,add library

4.ActionSupport

具体视图的返回可以由用户自己定义的Action来决定
具体的手段是根据返回的字符串找到对应的配置项,来决定视图的内容

具体Action的实现最常用的是从ActionSupport继承,好处在于可以直接使用Struts2封装好的方法

<action name=''" class="">

public String execute() {

}

5.Path路径问题说明

struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
虽然可以用redirect方式解决,但redirect方式并非必要。 (最好不用这种方法)
解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径)
或者使用myeclipse经常用的,指定basePath

JSP文件中:

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<head>
<base href="<%=basePath%>" />    <!-- 指定base后,默认前面都加上basePath>

6.动态方法调用(DMI)

可以在配置文件中配置Action的时候用method=来指定执行哪个方法(这个不推荐使用)

 也可以在url地址中动态指定(动态方法调用DMI),url中指定调用action的方法,使用感叹号!

例如/Struts2_0500_ActionMethod/user/user!add(这个就是调用user Action的add方法)

7.Wildcards通配符

使用通配符,将配置量降到最低
不过,一定要遵守"约定优于配置"的原则

例子:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<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>

其中:{1}代表第一个*,{2}代表第二个*

7.使用Action接收参数

例子:

Note:参数的名字必须要Action的get和set方法的名字一致

URL:Struts2_0700_ActionAttrParamInput/user/user!add?name=a&age=8

<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>
UserAction代码:
package com.bjsxt.struts2.user.action;

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;
	}
	
	
}

8.使用Domain Model接收参数
URL:user/user!add?user.name=a&user.age=8
Note:Action类中应有一个user实例,或者使用UserDTO,UserDTO先接收参数,然后通过UserDTO创建User。

<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>

UserAction代码:

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代码:

package com.bjsxt.struts2.user.model;

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;
	}
}

9.使用ModelDriven接收参数(这个方法不太常用)

Note:Action要实现ModelDriven接口,重写public <T> getModel()方法

URL:user/user!add?name=a&age=8

<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>


UserAction代码:

package com.bjsxt.struts2.user.action;

import com.bjsxt.struts2.user.model.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class UserAction extends ActionSupport implements ModelDriven<User>{
	
	private User user = new User();
	
	public String add() {
		System.out.println("name=" + user.getName());
		System.out.println("age=" + user.getAge());
		return SUCCESS;
	}

	@Override
	public User getModel() {
		return user;
	}
	
}


User类同上。

10.解决中文乱码问题

参考:Struts2_1000_CharacterEncoding

struts2-core-2.1.7.jar包下的org.apach.struts2中static文件中的default.properties

struts.xml中进行如下配置:
 <constant name="struts.i18n.encoding" value="GBK" />

11.简单数据验证(这个项目还不是太明白)

参考:Struts2_1100_SimpleDataValiation

12.访问Web元素(这个项目还是不太明白)

参考:Struts2_1200_AccessWebElements

13.Struts2模块包含

参考:Struts2_1300_IncludeModules

可以用include细分模块的管理

 struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <constant name="struts.devMode" value="true" />
    <include file="login.xml" />
</struts>

login.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts 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>

14.默认的Action

参考:Struts2_1400_DefaultAction

当URL为不存在的Action时,自动跳转到设置好的默认Action(前提要满足相应的namespace条件)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<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>


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值