struts.xml里的action的几种配置 <package name="hello" namespace="/abc" extends="struts-default"> <!-- 1.最常用的方法 --> <action name="login" class="com.lxitedu.ant.User" > <result name="input">/login.jsp</result> <result name="success">/success.jsp</result> <result name="error">/failure.jsp</result> </action> <!-- 2 方法 --> <action name="*action" class="com.lxitedu.ant.User" method="{1}"> <result name="input">/login.jsp</result> <result name="success">/success.jsp</result> <result name="error">/failure.jsp</result> </action> <!-- 3 方法 --> <action name="*" class="com.lxitedu.ant.User" > <result name="input">/login.jsp</result> <result name="success">/success.jsp</result> <result name="error">/failure.jsp</result> </action> </package>
user.java
action类 User.java
package com.lxitedu.ant;
import org.apache.struts2.interceptor.ServletResponseAware;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class User extends ActionSupport {
private static final long serialVersionUID = 1L;
private String name;
private String password;
private HttpServletResponse response;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String execute() throws Exception {
setName(getName());
return SUCCESS;
}
@SuppressWarnings("unchecked")
public void validate() {
if (getName().equals("") || getPassword().equals("")) {
addFieldError("name", getText("error.name"));
} else if (!(getName().equals("chenmiao") && getPassword().equals("123456"))) {
addFieldError("name", getText("error.error"));
}
}
public String add() throws Exception {
System.out.println("add");
setName(getName());
return SUCCESS;
}
}
login.jsp
login.jsp 页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:form action="abc/login.action" >
<s:textfield name="name" label="User Name" />
<s:password name="password" label="Password" />
<s:submit />
</s:form>
<!-- 最普通的 -->
<s:form action="login!add.action">
<s:textfield name="name" label="User Name" />
<s:password name="password" label="Password" />
<s:submit />
</s:form>
<!-- 在action直接指定进入add方法 -->
<s:form action="login!add.action" namespace="/abc">
<s:textfield name="name" label="User Name" />
<s:password name="password" label="Password" />
<s:submit />
</s:form>
<!-- 另一种从action直接指定进入add方法 -->
<s:form action="abc/addaction.action">
<s:textfield name="name" label="User Name" />
<s:password name="password" label="Password" />
<s:submit />
</s:form>
<!-- 对应的sturs.xml文件的第2配置法进add方法 -->
<s:form action="abc/login.action">
<s:textfield name="name" label="User Name" />
<s:password name="password" label="Password" />
<s:submit />
</s:form>
<!-- 对应的sturs.xml文件的第3种配置进execute()方法 -->
</body>
</html>
成功页面 success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<h2>Login Success. Welcome <s:property value="name" /></h2>
</body>
</html>
说明:
动态方法调用
(1)action名!方法名.action
action类里面自定义一个方法,add();
如:(s:form action="login!add.action" namespace="/abc");
指定之后,则不执行action类里面的execute()方法,而是add方法。
(2)在struts.xml里面的action里面配置
如:<action name="login" class="com.lxitedu.ant.User" method=“方法名”>
注意:一般不推荐使用!
(3) <action name="*action" class="com.lxitedu.ant.User" method="{1}">
然后在js页面的action改为(s:form action="方法名action.action");
如:(s:form action="addaction.action");
(4)struts.xml里面配置
<action name="*" class="com.lxitedu.ant.User">
所有请求都进execute()方法;
如果需要指定进入自定义方法则在action里面加上method=“方法名”
如:<action name="*" class="com.lxitedu.ant.User" method="add">
所以请求都进add方法。
(5)<action name="*" class="com.{1}类名" >能够动态的找到包名或者类名。
(6)<action name="*_*" class="com.{1}类名" method="{2}">
能够动态的去找到包名或者方法名
在页面上<s:form action="ant_add" namespace="/abc">
那么找到的就是com.ant类名中的add方法。