struts2之json插件

一、引入json插件包html

<!-- 引入struts2的json插件 -->
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-json-plugin</artifactId>
        <version>${struts.version}</version>
    </dependency>

二、配置xml,extends="json-default",<result name="success" type="json"></result>java

<?xml version="1.0"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
    <package name="indexPackage" namespace="/" extends="json-default">
        <action name="indexAction_*" class="indexAction" method="{1}">
            <result name="success" type="json"></result>
        </action>
    </package>
</struts>

三、Action中使用ajax

package cn.sniper.project.action;

import org.apache.struts2.json.annotations.JSON;

@Controller("indexAction")
@Scope("prototype")
public class IndexAction extends BaseAction<UserVo> {
    
    private static final long serialVersionUID = -8269406543148672672L;

    //登陸默認是失敗
    private String login = FAIL;
    
    /**
     * 跳轉到登陸頁面
     * @return
     */
    public String login() {
        return LOGIN;
    }
    
    /**
     * 登陸
     * @return
     */
    public String doLogin() {
        UserVo user = this.getModel();
        if(user.getUsername().equals(user.getPassword())) {
            
            this.setLogin(SUCCESS);
            
            //json只能獲取獲得棧頂元素
            super.push(this.login);
            
            return SUCCESS;
        } else {
            throw new RuntimeException();
        }
    }
    
    /**
     * 登陸成功後首頁
     * @return
     */
    public String index() {
        return INDEX;
    }
    
    @JSON(name="login")
    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }
}

四、json相關:apache

a、傳遞到頁面的json對象爲棧頂元素

b、重命名json對象
    @JSON(name="login")
    public String getLogin() {
        return login;
    }

c、設置屬性不作json序列化
    @JSON(serialize=false)
    public String getLogin() {
        return login;
    }
    
d、格式化日期
    @JSON(format="yyyy-MM-dd")
    public String getDate() {
        return date;
    }

五、json插件原理,查看struts2-json-plugin.jar根目錄下的struts-plugin.xml文件,發現json-default自己繼承自struts-default,而且自定義了類型json:json

<?xml version="1.0" encoding="UTF-8" ?>

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

<struts>
    <package name="json-default" extends="struts-default">

        <result-types>
            <result-type name="json" class="org.apache.struts2.json.JSONResult"/>
        </result-types>

        <interceptors>
            <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
            <interceptor name="jsonValidation" class="org.apache.struts2.json.JSONValidationInterceptor"/>

            <!-- Sample JSON validation stack -->
            <interceptor-stack name="jsonValidationWorkflowStack">
                <interceptor-ref name="basicStack"/>
                <interceptor-ref name="validation">
                    <param name="excludeMethods">input,back,cancel</param>
                </interceptor-ref>
                <interceptor-ref name="jsonValidation"/>
                <interceptor-ref name="workflow"/>
            </interceptor-stack>

        </interceptors>

    </package>
</struts>

六、訪問頁面:post

$.ajax({
                url : baseURL + '/indexAction_doLogin.action',
                type : 'post',
                data : {
                    username : $('#username').val(),
                    password : $('#password').val(),
                },
                beforeSend : function () {
                    $.messager.progress({
                        text : '正在登陸中...',
                    });
                },
                success : function (data, response, status) {
                    $.messager.progress('close');
                    
                    /**
                     * 爲何data不採用boolean類型?
                     *         由於作if(data)判斷的時候,只要data是非空,就是true值,這樣若是登陸失敗返回非空值,就會致使認爲登陸成功
                     */
                    if(data=="success") {
                        location.href = baseURL + '/indexAction_index.action';
                    } else {
                        $.messager.alert('登陸失敗!', '用戶名或密碼錯誤!', 'warning', function () {
                            $('#password').select();
                        });
                    }
                }
            });
相關文章
相關標籤/搜索