struts2获取表单数据之 属性封装 模型驱动 表达式封装 对象封装到list集合 对象封装到map集合 五种方便的封装方式

Posted sovagxa&静默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2获取表单数据之 属性封装 模型驱动 表达式封装 对象封装到list集合 对象封装到map集合 五种方便的封装方式相关的知识,希望对你有一定的参考价值。

一、属性封装

  属性封装是在action里面设定属性值,属性名字一定要和表单中的name一样,action中extends ActionSupport

  demo1.jsp:

  <body>
    This is my login JSP page. <br>
    <form action="demo1.action" method="post" >
    username<input type="text" name="username"><br><!-- name和属性名称一样 -->
    password<input type="text" name="password"><!-- name和属性名称一样 -->
    <input type="submit">
    </form>
  </body>

  action:

public class Damo1Action extends ActionSupport {
    private String username;//属性名称和表单name一样
    private String password;
    //一定要设置get set方法
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String demo1(){
        System.out.println(username+"\n"+password);//直接即可获取值
        return "go";
    }
}

  struts2相关配置:

        <package name="com.demo.test" extends="struts-default" namespace="/">
            <action name="demo1" method="demo1" class="com.demo.test.Damo1Action"><!-- 属性封装 -->
                <result name="go">/index.jsp</result>
            </action>
        </package>

 

 

================================================================================================================================================================

二、模型驱动封装

  直接将表单数据封装在javabean对象中

struts2的相关配置:

            <action name="demo2" method="demo2" class="com.demo.test.Damo2Action"><!-- 模型驱动封装 -->
                <result name="go">/index.jsp</result>
            </action>

 

user实体类,两个属性

/**
 * 用于demo2的user实体类
 * @author Administrator
 *
 */
public class User {
    String username;
    private String password;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "User [username=" + username + ", password=" + password + "]";
    }
    
}

 

表单页面与demo1公用

action:

注意要实现接口ModelDriven

public class Damo2Action implements ModelDriven<User>{//实现接口ModelDriven 并且有个泛型,泛型是实体类对象
    private User user=new User();//new一个全局user对象
    @Override
    public User getModel() {//获得模型的方法,不需要调用
        // TODO Auto-generated method stub
        return user;//返回user对象
    }
    public String demo2(){
        System.out.println(user);//直接显示user
        return "go";
    }
}

 

 

 

================================================================================================================================================================

三、表达式封装

  表达式封装可以将一个表单内的数据封装到不同对象中

  jsp页面:

  <body>
    This is my login JSP page. <br>
    <form action="demo3.action" method="post" >
    username<input type="text" name="user.username"><br><!-- name中的user是实体类对象而不是类名 -->
    password<input type="text" name="user.password"><!-- 通过指向不同的实体类对象就可以将一个表单页面中的内容封装到多个对象中 -->
    <input type="submit">
    </form>
  </body>

 

action代码

声明user对象,写出对象的get  set 方法

public class Damo3Action extends ActionSupport{
    private User user;
    public User getUser(){
        return user;
    }
    public void setUser(User user){
        this.user=user;
    }
    public String demo3(){
        System.out.println(user);//直接显示user
        return "go";
    }
}

 

struts2中的配置

            <action name="demo3" method="demo3" class="com.demo.test.Damo3Action"><!-- 表达式封装 -->
                <result name="go">/index.jsp</result>
            </action>

 

 

======================================================================================================================================

四、表单数据封装到list

 list可以将表单数据封装到多个同一实体类的不同对象中

jsp页面:

 

  <body>
    This is my login JSP page. <br>
    <form action="demo4.action" method="post" >
    username<input type="text" name="list[0].username"><br>
    password<input type="text" name="list[0].password"><!-- 表单输入的值就是list中第0个对象的password属性值 -->
    <input type="submit">
    </form>
  </body>

 

action:

list要声明get set集合

public class Damo4Action extends ActionSupport{
    List<User> list;
    
    public String demo4(){
        System.out.println(list.get(0).getUsername());//获取list集合中的第0个对象并且获得username
        System.out.println(list.get(0).getPassword());
        return "go";
    }
//    list集合的get set集合
    public List<User> getList() {
        return list;
    }

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

 

 struts2相关配置

            <action name="demo4" method="demo4" class="com.demo.test.Damo4Action"><!-- 表达式封装 -->
                <result name="go">/index.jsp</result>
            </action>

 

 

======================================================================================================================================================

五、数据对次昂封装到Map集合中

Map集合为键值对形式,使用key可以获得相应value

jsp页面

  <body>
    This is my login JSP page. <br>
    <form action="demo4.action" method="post" >
    username<input type="text" name="map[‘one‘].username"><br>
    password<input type="text" name="map[‘one‘].password"><!-- 表单输入的值就是map中key为one对象的password属性值 -->
    <input type="submit">
    </form>
  </body>

 

action:

public class Damo5Action extends ActionSupport{
    Map<String ,User> map;//声明map
    public String demo4(){
        System.out.println(map.get("one").getUsername());//获取map集合中key为one对象并且获得username
        System.out.println(map.get("one").getPassword());
        return "go";
    }
//    map集合的get set集合
    public Map<String, User> getMap() {
        return map;
    }
    public void setMap(Map<String, User> map) {
        this.map = map;
    }
    
}

 

struts2配置

            <action name="demo5" method="demo5" class="com.demo.test.Damo5Action"><!-- 表达式封装 -->
                <result name="go">/index.jsp</result>
            </action>

 总结

 以上总计五种方式,最常用的是第二种方式  模型驱动封装,可以直接获得实体类对象,注意name属性和属性名称一定要相同,否则不能传值,缺点是只能封装到一个实体类中,若要封装到两个实体类就要使用第三种方式

 

 

  

以上是关于struts2获取表单数据之 属性封装 模型驱动 表达式封装 对象封装到list集合 对象封装到map集合 五种方便的封装方式的主要内容,如果未能解决你的问题,请参考以下文章

struts2属性驱动模型

struts2 封装获取表单数据的方式

struts2 模型驱动封装

Struts2学习

Java实战之01Struts2-03属性封装类型转换数据验证

Struts2参数的封装