这里将通过用户登录示例来解析struts.xml中的几个配置。这个配置包括:
1.自定义一个action
2.指定调用action的方法
3.表单提交时,如何自动封装表单数据到实体对象。
4.action后如何调转到回显页面
编写一个自定义的action,需注意一下三点:
首先:用户自己编写一个action,此action实现了Action接口。即实现了此接口的exectue方法,当然用户编写一个action,此action继承ActionSupport类。
其次,当自定义了一个action类是,此类需要为表单提交数据的每一项准备一个field,同时有其对应的get和set方法。
还有一点,此action必须有一个无参构造函数。
下面是一个实现了Action接口的action示例:
package cn.itcast.action;
import cn.itcast.domain.User;
import cn.itcast.service.UserService;
import com.opensymphony.xwork2.Action;
public class LoginAction implements Action {
private User user; //为表单数据提供一个feild
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
UserService service = new UserService();
if(service.userValidator(user)>0){
return SUCCESS;
}else{
return ERROR;
}
}
public String del() throws Exception {
// TODO Auto-generated method stub
UserService service = new UserService();
if(service.userValidator(user)>0){
return ERROR;
}else{
return SUCCESS;
}
}
}
用户提交数据后,jsp页面编写如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
<form action="loginAction" method="post">
用户名:<input type="text" name="user.name" /><br />
密码: <input type="password" name="user.password" /><br />
<input type="submit" value="注册" />
</form>
</body>
</html>此jsp将会将输入的name和password填充到user实体对象的对应属性上。同时将此表单数据提交给loginAction去处理。下面是对应的struts.xml配置文件。
<struts>
<!-- 指定devMode为开发模式,即每修改一处配置后,无须重新发布web应用,即可生效 -->
<constant name="struts.devMode" value="true" />
<!-- namespace指定命名空间 -->
<package name="default" namespace="/" extends="struts-default">
<action name="loginAction"
class="cn.itcast.action.LoginAction"
method="del">
<result name="success">
/WEB-INF/jsp/success.jsp
</result>
<result name="error">
/WEB-INF/jsp/error.jsp
</result>
</action>
<!-- 它是一个通用的action,*为通配符,当从浏览器地址栏解析uri地址,并通过namespace解析
获取到了对应的action名称后,将在struts中查询对应的配置。找到后将调转到result指定的
显示页面。 -->
<action name="*Action">
<result>
/WEB-INF/jsp/{1}.jsp
</result>
</action>
</package>
<!-- Add packages here -->
</struts>此配置文件有几点需要说明的是:
第一,自定义一个action,需要在action标签中通过class来指定处理这个action的类(即指定自定的action来处理)
第二,通过action标签的method方法来指定处理这个action的方法,默认为execute。上面例子中指定了del方法。
第三,result标签通过name属性来指定调用不同的jsp回显页面。上面有两个result,一个为error对应的一个result,一个为success对应的result.当然后面还有一个一般匹配的action(在struts2中,同一个package中配置action有先后顺序,它依次匹配靠前的action,要是匹配到了,将不会使用后面的action,因此上例中,当LoginAction匹配到后,将会不调用下面的一般匹配的action)。
第四, 至于调用action那个result, 需要根据action中指定的方法(默认为exectue)回显的字符串。回显success,则是success标签。error,则是error标签。通常action回显有五种标签,LOGIN,INPUT,ERROR,SUCCESS,NONE。
下面是简单的流程图描述:

本文通过用户登录示例解析Struts2配置文件struts.xml的关键元素。介绍如何自定义Action处理表单提交,配置不同方法及结果页面映射。

726

被折叠的 条评论
为什么被折叠?



