2.Struts2 数据处理

Struts2 数据处理


结果页面配置

  • result 标签 配置 action 返回的值,最终的去向;

1. 全局结果页面

  • 如果 多个返回值 和 跳转页面 一致时使用
<package>
    <global=results>
        <result name="返回值">跳转路径</result>
    </global=results>
    .........
</package>

2. 局部结果页面

  • 最终以局部结果为准
<package>
    <action name="提交名称" class="指定类路径">
        <result name="返回值">跳转路径</result>
        .........
        </action>
    .........
</package>

3. result 标签 type 属性

  • type值 规定了 跳转方式
    • dispatcher 默认值 转发
    • redirect 重定向
    • chain 转发到 action (几乎不用)
    • redirectAction 重定向到 action
<package>
    <action name="提交名称" class="指定类路径">
        <result name="返回值1" type="dispatcher">跳转路径1</result>
        <result name="返回值2" type="redirect">跳转路径2</result>
        .........
        </action>
    .........
</package>

在 action 获取 from 数据 *

  • 提交到 action , 但是 action没有 request ,也不能直接使用 request

1. 使用ActionContext类获取

  • ActionContext 类的方法
void put( String key , Object value ) 将key 和 value 放入 ActionContext 中,模拟HttpServletRequest的 setAttribute方法
Object get(String key) 通过 key 的值 查找 ActionContext中的值
Map <String,Object>.getApplication() 返回一个Application作用域的Map对象
static ActionContext.getContext() 获取当前线程的ActionContext对象,通过这个方法获得
Map <String,Object>.getParamenters() 返回一个包含所有HttpServletRequest参数的信息的Map对象
Map <String,Object>.getSession() 返回一个Map类型的HttpSession对象
void setApplication(Map <String,Object> application) 设置Application上下文
void setSession(Map <String,Object> session) 设置一个Map类型的Session值

2. 使用SercletActionContext类获取

httpServletRequest.getRequest() 获取web应用的HttpServletRequest 对象
httpServletResponse.getResponse() 获取web应用的HttpServletResponse 对象
ServletContext.getServletContext() 获取web应用的ServletContext 对象
PageContext.getPageContext() 获取web应用的PageContext 对象

封装数据到值栈


属性封装

  1. 定义变量,变量和表单输入项name的属性值一样
  2. 生成 getter 和 setter 方法

注意值栈的有效范围为*类似request,如果要获取必须存在,如有2个跳转以上,必须改为转发,也就是说struts.xml中 配置结果发送模式为转发

提交页面
<form action="users_action" method="post">
            用户:<input type="text" name="uname" required="required" />
            密码:<input type="password" name="password" required="required"/>
            <input type="submit" value="login" />
        </form>
展示页面
    <%@taglib uri="/struts-tags" prefix="s"%>
......
用户:
    <s:property value="uname"/>
    <br> 
    密码:
    <s:property value="password"/>
    <br>
struts.xml 配置
<struts>
    <package name="Users" namespace="/" extends="struts-default">
        <action name="users_action" class="com.action.UsersAction" method="login">
            <result name="ok" >ok.jsp</result>
        </action>
    </package>
</struts> 
Action类
package com.action;

public class UsersAction {
    private String uname;
    private String password;

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String login() {
        return "ok";
    }

}

模型封装

  1. action 实现接口 ModelDrive .
  2. 实现接口 的方法 getModel.
    ** 把创建的对象返回
  3. 在action中创建实体类对象 Users us = new Users();
action类
public class UsersAction extends ActionSupport implements ModelDriven<Users> {
    //必须创建实体类对象
    private Users us = new Users();

    public Users getUs() {
        return us;
    }

    public void setUs(Users us) {
        this.us = us;
    }

    public String login() {
        return "ok";
    }

    @Override
    public Users getModel() {
        //返回一个Users对象
        return us;
    }
}

表达式封装

前台展示

<!-- !标签导入 -->
<%@taglib uri="/struts-tags" prefix="s"%>
....
<p>
    用户:
    <s:property value="us.uname"/>
    密码:
    <s:property value="us.password"/>
</p>

前台提交

    <form action="users_action" method="post">
        用户:<input type="text" name="us.uname" /> 
        密码:<input type="text" name="us.password" />
        <input type="submit">
    </form>

struts.xml配置

<struts>
    <package name="users" extends="struts-default" namespace="">
        <action name="users_action" class="com.action.UsersAction" method="login">
            <result name="ok">index.jsp</result>
        </action>
    </package>
</struts>    

Action动作类

package com.action;

import com.bean.Users;

public class UsersAction {
    private Users us  ;

    public Users getUs() {
        return us;
    }

    public void setUs(Users us) {
        this.us = us;
    }
    public String login(){
        System.out.println(us);
        return "ok";
        }
}

实体类

package com.bean;

public class Users {
    private String uname;
    private String password;
    public String getUname() {
        return uname;
    }
    public void setUname(String uname) {
        this.uname = uname;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "Users [uname=" + uname + ", password=" + password + "]";
    }


}

表达式封装和模型驱动的区别

  • 相同:可以把数据封装到实体类里面
  • 不同:表达式封装可以到不同的实体类里面

封装到集合里面

  1. List集合
    1. Action类中声明List集合
    2. 表单输入项name属性值按照这样的格式填写
      例:name="list[0].us.uname"
实体类
package com.action;

import java.util.List;

import com.bean.Users;

public class UsersAction {
    List<Users> list;

    public List<Users> getList() {
        return list;
    }

    public void setList(List<Users> list) {
        this.list = list;
    }

    public String login() {
        return "ok";
    }
}
提交页面
<form action="users_action" method="post">
        用户:<input type="text" name="list[0].uname" /> 
        密码:<input type="text" name="list[0].password" /><br>
        用户:<input type="text" name="list[1].uname" /> 
        密码:<input type="text" name="list[1].password" /><br>
        用户:<input type="text" name="list[2].uname" /> 
        密码:<input type="text" name="list[2].password" /><br>
        用户:<input type="text" name="list[3].uname" /> 
        密码:<input type="text" name="list[3].password" /><br>
        <input type="submit">
    </form>
展示页面
<%@taglib uri="/struts-tags" prefix="s"%>
....
    <s:iterator value="list">
        用户:
            <s:property value="uname"/>
        密码:
            <s:property value="password"/><br>
    </s:iterator>
struts.xml
<struts>
    <package name="users" extends="struts-default" namespace="">
        <action name="users_action" class="com.action.UsersAction" method="login">
            <result name="ok">index.jsp</result>
        </action>
    </package>
</struts>    
  1. Map集合
    1. Action类中声明Map集合
    2. 表单输入项name属性值按照这样的格式填写
      例:name="map['声明键值'].us.uname"

猜你喜欢

转载自blog.csdn.net/luke199257/article/details/80766554