struts2初步使用

  • 时间:
  • 浏览:
  • 来源:互联网

1、如何获取session等API

在servlet中,获取session需要从request对象中获取,struts2与servlet解耦后,提供个了ActionContext类,通过这个类可以获取session、request、application这三个对象
Map<String,Object> session=ActionContext.getContext().getSession()
想要在session里放入登录的用户,直接session.put(“loginUser,user”),就可以实现了
request=ActionContext.getContext().get(“request”)
application=ActionContext.getContext().getApplication()
另外,也可以通过实现ServletRequestAware, ServletResponseAware的方式得到request和response
另外,struts2也提供了耦合的方法获取servlet的API。通过 ServletActionContext.getRequest();ServletActionContext.getResponse()能获取到request和response等但需要导入javax.servlet.api依赖。

2、数据校验

action继承于AtionSupport类,该类不仅对Ation接口进行简单实现,同时增加了验证,本地化等支持。重写其validate方法,在方法内部编写自定义的数据校验逻辑。

3、前后端传值

struts2不仅可以将基本数据类型在控制器和前端页面之间传递,其中模型驱动封装还可以传递类类型,首先控制器要实现ModelDriven的getModle方法,并且将类类型作为控制器的私有属性,private Item item = new Item(),在前端往后端传递时,标签的name属性的值与类类型属性的的值保持一致,struts2就会自动封装在类类型中,但是如果属性和模型驱动封装同时使用,属性封装无法获得值,例如:
Item类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Item implements Serializable {
    /**
    * 产品编号
    */
    private String code;

    /**
    * 产品名称
    */
    private String name;

    /**
    * 产品描述
    */
    private String description;

    /**
    * 风险等级
    */
    private String risk;

控制器

//实现ModelDriven<Item>的getModel,前端传过来的数据自动封装成对象
public class ItemAction extends ActionSupport implements ModelDriven<Item> {
    @Autowired
    private ItemService itemService;
    //申明要封装的对象
    private Item item = new Item();
    private Result result;

    //获取前端传过来的Item对象,属于ModelDriven<Item>的抽象方法,不能删除
    @Override
    public Item getModel() {
        return item;
    }
}

前端form表单,为了减少篇幅,上两个文件的属性没有写全,对应相应的属性即可。

<form action="http://localhost:8088/putaway" method="post">
                        <div class="row">
                            <div class="col-sm-6 col-md-5 col-lg-5 col-md-offset-1">
                                <div class="form-group">
                                    <label for="name"><span style="color: #E52323">*</span> 产品名称</label>
                                    <input type="text" class="form-control" id="name" name="name">
                                </div>
                                <div class="form-group">
                                    <label for="type"><span style="color: #E52323">*</span>
                                        产品类型</label>
                                    <input type="text" class="form-control" id="type" name="type">
                                </div>

                                <div class="form-group">
                                    <label for="type"><span style="color: #E52323">*</span>
                                        收益滚动</label>
                                    <select class="form-control" name="earningsType">
                                        <option value="0">利滚利</option>
                                        <option value="1">非利滚利</option>
                                    </select>
                                </div>
                                <div class="form-group">
                                    <label><span style="color: #E52323">*</span>
                                        起购金额</label>
                                    <input type="text" class="form-control" name="originShare">
                                </div>
                                <div class="form-group">
                                    <label>&nbsp;&nbsp;产品库存</label>
                                    <input type="text" class="form-control" name="stock">
                                </div>
                                <div class="form-group">
                                    <label>&nbsp; 预售开始时间</label>
                                    <input class="form-control" type="date" name="presellBeginDate">

                                    <!--                                    <input type="password" class="form-control" id="exampleInputPassword1">-->
                                </div>
                                <div class="form-group">
                                    <label>&nbsp; 预售结束时间</label>
                                    <input class="form-control" type="date" name="presellEndDate">
                                    <!--                                    <input type="password" class="form-control" id="exampleInputPassword1">-->
                                </div>

                            </div>


                            <div class="col-sm-6 col-md-5 col-lg-5">
                                <div class="form-group">
                                    <label for="name">&nbsp; 开售时间</label>
                                    <input class="form-control" type="date" name="onSaleDate">
                                </div>
                                <div class="form-group">
                                    <label>
                                        &nbsp; 停售时间</label>
                                    <input class="form-control" type="date" name="haltDate">
                                </div>

                                <div class="form-group">
                                    <label><span style="color: #E52323">*</span>
                                        风险类型</label>
                                    <select class="form-control" name="risk">
                                        <option value="R1">R1</option>
                                        <option value="R2">R2</option>
                                        <option value="R3">R3</option>
                                        <option value="R4">R4</option>
                                    </select>
                                </div>

                                <div class="form-group">
                                    <label>&nbsp; 产品所属公司</label>
                                    <input type="text" class="form-control" name="ownerCompany">
                                    <!--                                    <input type="password" class="form-control" id="exampleInputPassword1">-->
                                </div>

                                <div class="form-group">
                                    <label>&nbsp; 产品所属公司账号</label>
                                    <input type="text" class="form-control" name="ownerAccount">
                                    <!--                                    <input type="password" class="form-control" id="exampleInputPassword1">-->
                                </div>
                                <div class="form-group">
                                    <label>&nbsp; 利率</label>
                                    <input type="text" class="form-control" name="rate">
                                    <!--                                    <input type="password" class="form-control" id="exampleInputPassword1">-->
                                </div>
                                <div class="form-group">
                                    <label>&nbsp; 单价</label>
                                    <input type="text" class="form-control" name="unitPrice">
                                </div>

                                <div class="form-group">
                                    <label>&nbsp; 产品描述</label>
                                    <textarea class="form-control" rows="4" cols="" name="description"></textarea>
                                </div>

                            </div>
                        </div>
                        <input  type="submit" class="btn btn-info" id="confirm" value="申请上架"></input>
                    </form>
                  

前端传值时,属性相同就会自动封装到对象中。
之所以struts2可以拥有这个能力,是因为其提供了一个叫做值栈的作用于,其功能和属性类似于servlet中的request,在使用转发和重定向时尤其注意。

4、struts2的配置文件

struts.xml默认在resource/WEB-INF/下,其配置内容如下,这种方式简单直观,缺点是随着方法的增多,配置文件会变得越来越臃肿。除了这种配置方式,struts2还支持动态方法调用,通配符调用等,需要时百度。


<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
<!--<constant name="struts.action.extension" value="do"></constant>-->
    <!--设置主题样式,解决使用struts2的标签时产生的样式错乱问题-->
    <constant name="struts.ui.theme" value="simple"/>
    <!--设置配置文件及时编译-->
    <constant name="struts.configuration.xml.reload" value="true"/>
    <!--解决中文乱码-->
    <constant name="struts.i18n.encoding" value="UTF-8"></constant>
    <!--必须有一个包继承于struts-default,这是struts2框架提供的默认配置文件,其他的包再继承于该包进行扩展,一般来说,这个默认包用来配置值一些公共的属性,其他包继承这个包即可-->
    <package name="default" namespace="/" extends="struts-default">
        <action name="testVm" class="com.i2f.training4.action.TestAction" method="testVm">
<!--type在struts2中有三种取值,dispatcher表示转发,redirect表示重定向,redirectAction重定向到action,默认值为dispatcher-->
            <result name="testVmSuccess" type="">/WEB-INF/putaway.vm</result>
        </action>
    </package >
<struts>

本文链接http://www.dzjqx.cn/news/show-617055.html