Struts2中常用的接收参数的方法

Struts2中常用的接收参数的方法

1.提供属性set方法的方式
  • 1).在Action当中提供对应属性的set方法就会自动接收参数,并且会自动将类型转换为在Action类中设置属性时候所设置的属性的类型。

  • 2).编写方式

     //将接收表单中的参数设置为对应的属性(表单中name属性所对应的值)
        //设置属性的类型的时候就已经做了数据类型的转换了(框架内部自动就做了类型的转换)
        private String username;
        private Integer age;
        //接收同一字段有多个值的时候可以使用list集合的方式
        private List hobby;
    
        //为设置的属性提供set方法(可以用lombok代替,但是注意要打开注解)
        public void setUsername(String username) {
            this.username = username;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public void setHobby(List hobby) {
            this.hobby = hobby;
        }
    
    
        //设置完之后,再点击表单进行提交的时候
        //这个类就会自动接收这些内容,并封装成相应的包装类
    
    
        public String execute(){
            //接收完参数过后就可以直接在执行方法(默认execute)中进行打印了
            System.out.println(username);
            System.out.println(age);
            System.out.println(hobby);
            return null;
        }
    
  • 3).缺点:接收少量数据可以使用,如果使用大量数据就会太麻烦,最好封装成对象操作

2.页面中提供表达式的方式
  • 1).建立form表单

     <form action="${pageContext.request.contextPath}/myform4.action">
        用户名:<input type="text" placeholder="请输入用户名..." name="username"><br/>
        年龄:<input type="text" placeholder="请输入年龄..." name="age"><br/>
        爱  好: <input type="checkbox" value="足球" name="hobby">足球
        <input type="checkbox" value="篮球" name="hobby">篮球
        <input type="checkbox" value="乒乓球" name="hobby">乒乓球<br/>
        <input type="submit" value="提交">
      </form>
    
  • 2).创建domain包并创建与表单中的提交内容相对应的值(符合javaBean规范)的类(User)

  • 3).编写Action方法

    • 创建User类的属性
    • 为这个属性提供get和set方法
    • 编写execute方法
      //创建User属性
          private User user;
          //为User提供get和set方法
          public User getUser() {
              return user;
          }
          public void setUser(User user) {
              this.user = user;
          }
      
          //在页面当中提供表达式的方式
          public String execute (){
              System.out.println(user);
              return null;
          }
      
  • 4).配置struts.xml文件(添加相应的action)

  • 5).修改表单(user.+ “user为创建的类的属性名”)

    <form action="${pageContext.request.contextPath}/myform4.action">
        用户名:<input type="text" placeholder="请输入用户名..." name="user.username"><br/>
        年龄:<input type="text" placeholder="请输入年龄..." name="user.age"><br/>
        爱  好: <input type="checkbox" value="足球" name="user.hobby">足球
        <input type="checkbox" value="篮球" name="user.hobby">篮球
        <input type="checkbox" value="乒乓球" name="user.hobby">乒乓球<br/>
        <input type="submit" value="提交">
      </form>
    
  • 6).操作完毕,提交表单的时候就会自动将表单中提交的内容封装到对象当中

3.采用模型驱动的方式
  • 1).创建表单

      ```
      <form action="${pageContext.request.contextPath}/myform5.action">
          用户名:<input type="text" placeholder="请输入用户名..." name="username"><br/>
          年龄:<input type="text" placeholder="请输入年龄..." name="age"><br/>
          爱  好: <input type="checkbox" value="足球" name="hobby">足球
          <input type="checkbox" value="篮球" name="hobby">篮球
          <input type="checkbox" value="乒乓球" name="hobby">乒乓球<br/>
          <input type="submit" value="提交">
        </form>
      ```
    
  • 2).创建一个接收表单的domain模型

  • 3).创建Action+execute方法

    • 创建的类要的实现接口ModelDriver<>将注解设置为创建的domain模型所对应的的类
    • 实现接口中的方法
    • 创建封装接口的对象即domain中创建的类(new一个对象)
    • 在实现 接口方法中返回创建的对象
      public class MyformAction5 extends ActionSupport implements ModelDriven<User> {
         private User user = new User();
      
          @Override
          public User getModel() {
              return user;
          }
          
          public String execute (){
              System.out.println("user===="+user);
              return null;
          }
      
  • 4).操作完毕之后就可以自动封装user这个对象了,然后在execute方法中就可以直接使用new的这个对象了

接收参数的错误
  • 任何一个拦截器在执行的过程当中,都会向错误信息中添加错误消息
  • 最后workflow会检查其中的错误信息是否有错误消息
  • 如果没有错误消息,就会调用invoke()直接到目标action
  • 如果有错误,就跳转到input
  • 所以在开发的时候,可以自己配置一个input逻辑视图(在struts.xml中设置一个全局变量【global-results中的result中添加name=“input” 返回界面为自己设定的一个界面】) 错误的时候就可以跳转到指定的界面,在页面中显示错误信息。
接收复杂类型的封装到list集合中
  • 1).创建jsp页面

    <form action="${pageContext.request.contextPath}/myform6.action">
        名称:<input type="text" placeholder="请输入商品名称..." name="goodslist[0].name"><br>
        名称:<input type="text" placeholder="请输入商品价格..." name="goodslist[0].price"><br>
        <hr>
        名称:<input type="text" placeholder="请输入商品名称..." name="goodslist[1].name"><br>
        名称:<input type="text" placeholder="请输入商品价格..." name="goodslist[1].price"><br>
        <input type="submit" value="提交">
      </form>
    
  • 2).创建页面对象的模型(在domain中创建表单中提交参数字段属性(符合javaBean规范))

  • 3).创建对象的action

    //设置一个Goods属性(domain中创建的符合javaBean规范的类)
        private List<Goods> goodslist;
        //提供list集合的get和set方法
        public List<Goods> getGoodslist() {
            return goodslist;
        }
        public void setGoodslist(List<Goods> goodslist) {
            this.goodslist = goodslist;
        }
    
        public String execute(){
            System.out.println(goodslist);
            return null;
        }
    
  • 4).在jsp中添加表达式

     name="goodslist[0].name"在名称前面添加goodslist[0],表示相同表单的第几个重复部分(下标从0开始)。(前面的表单已写好了)
    
  • 5).操作完毕,运行结果为

    运行结果示例:
    [Goods{name='goods1', price=11.0}, Goods{name='goods2', price=22.0}]
    
接收复杂类型封装到Map集合
  • Map集合操作方式基本上和List操作一致
  • 不同的地方为:
    • Action中方法的设置方式:

      //使用map集合来接收
          private Map<String,Goods> goodsMap;//键是String类型,所以在表单中“[]”中也是字符串方式。
          //提供get和set方法
          public Map<String, Goods> getGoodsMap() {
              return goodsMap;
          }
          public void setGoodsMap(Map<String, Goods> godsMap) {
              this.goodsMap = godsMap;
          }
      
          public String execute(){
              System.out.println(goodsMap);
              return null;
          }
      
    • jsp中表单name后面名称的设置([代表键])

      <form action="${pageContext.request.contextPath}/myform7.action">
          名称:<input type="text" placeholder="请输入商品名称..." name="goodsMap['one'].name"><br>
          名称:<input type="text" placeholder="请输入商品价格..." name="goodsMap['one'].price"><br>
          <hr>
          名称:<input type="text" placeholder="请输入商品名称..." name="goodsMap['two'].name"><br>
          名称:<input type="text" placeholder="请输入商品价格..." name="goodsMap['two']price"><br>
          <input type="submit" value="提交">
        </form>
      
    • 运行结果示例为:

      {one=Goods{name='goods1', price=11.0}, two=Goods{name='goods2', price=null}}
      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值