【Sturts2】【信息传递】【store拦截器】

本文详细介绍了Struts2中store拦截器的使用,包括其在信息传递中的作用,如Action错误、Action信息和字段错误。重点讲解了store拦截器如何配合@InputConfig注解进行错误处理和页面跳转,以及在Action类、拦截器配置和JS代码部署中的具体操作。同时,还提及了Param拦截器可能导致的ActionMessage问题及其解决方案。
摘要由CSDN通过智能技术生成

在Struts中,向jsp传递的信息有三种

  1. Action错误;addActionError(aMessage);
  2. Action信息; addActionMessage(aMessage);
  3. 字段错误 ;

    字段错误常用于后台输入效验
    this.addFieldError(fieldName, errorMessage);
    参考后台输入效验

Action信息和Action错误,是用于信息传递,要用到session容器来防止信息.

store拦截器

 用于将三种信息存入session.只存于一次响应.
 需要配合workflow拦截器:检测是否有信息,并跳转到规定的页面. 

workflow的@InputConfig注解:

  • 标记在Action方法之上,表示调用该方法前,检测是否有Action错误和字段错误,若有,就跳转到规定的页面
  • methodName,跳转到执行另外一个action
  • resultName,跳转到另外一个逻辑视图
案例:

保存编辑的信息

  • 编辑失败,跳转到编辑页面,并且弹窗编辑失败.
  • 编辑成功,跳转到列表界面,并弹窗编辑成功.
    ps:在在此情况下,编辑保存后,会重定向到显示list的Action.

1.Action类的部署

    //保存编辑内容Action
    public String save() {
        try {
            保存对象的代码片;
            this.addActionMessage("编辑成功");
        } catch (Exception e) {
            this.addActionError("编辑失败"+e.getMessage());
            e.printStackTrace();
        }
        return SUCCESS;
    }

    //显示列表的Action
    @InputConfig(methodName="input")
    public String execute() throws Exception {
        显示列表的代码片;
        return super.LIST;
    }

2.拦截器的部署

  • store拦截器,需要配置在workflow拦截器之前,
  • 配置拦截器类的属性<param name="operationMode">AUTOMATIC</param>表示方法执行前,提取异常,方法执行后,保存异常
<interceptor-stack name="myStack">
            <interceptor-ref name="自定义拦截器"/>
            <interceptor-ref name="store">
                <param name="operationMode">AUTOMATIC</param>
            </interceptor-ref>              
            <interceptor-ref name="paramsPrepareParamsStack"/>              
</interceptor-stack>

3.js代码的部署
将struts标签写入js代码中.
在ActionSupport类中,有两个方法 ;

  • hasActionMessages();Action信息中是否有值
  • hasActionErrors(); Action错误中是否有值

在列表界面中:

<script type="text/javascript">
    <s:if test="hasActionMessages()">
        var m='<s:property value="actionMessages[0]" />';
        alert(m);
    </s:if>
</script>

在编辑界面中

<script type="text/javascript">
    <s:if test="hasActionErrors()">
        var m='<s:property value="actionErrors[0]" />'
        alert(m);
    </s:if>
</script>

补充:在struts2的param拦截器中,如果请求过来的参数,在Action类中,找不到对应名称的字段,会将该信息存入ActionMessage中,造成ActionMessage很多信息.
可以通过重写Param拦截器,来改变.
这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值