struts2向浏览器响应json数据的两种方式

js部分调用方式是一样的:

JS代码:

function testAjax() { var $userNameInput = $("#ajax_username"); var userName = $userNameInput.val(); $.ajax({ url : "originAjax.action", type : "GET", data : "ajaxField=" + userName, success : function(data, textStatus) { alert(data); } }); }
private String username;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void checkUserName() throws IOException {

        HttpServletResponse response = ServletActionContext.getResponse();
        PrintWriter writer = response.getWriter();
        writer.print("hello " + username);
        writer.flush();
        writer.close();
    }
<action name="originAjax" class="TestAction" method="checkUserName" />  
重点讲解下第二种方式:

1.引入struts2-json-plugin-2.5.2.jar 

2.Action中添加类似的如下代码:

private String result;
public String getResult() {
        return result;
    }

    public void setResult(String result) {
        this.result = result;
    }
/**
     * 
     * AJAX for check MerchantAccount start
     * 
     * */
    private String merchantAccount;

    public String getMerchantAccount() {
        return merchantAccount;
    }

    public void setMerchantAccount(String merchantAccount) {
        this.merchantAccount = merchantAccount;
    }

    // AJAX for check Merchant
    public String checkMerchantAccountMethod() throws IOException {

         AppResultJsonBean ajaxResultJsonBean = new AppResultJsonBean();

        if (StarCloudStringUtils.isEmpty(merchantAccount)) {

            ajaxResultJsonBean.setIsOK(false);
            ajaxResultJsonBean.setData(null);
            ajaxResultJsonBean.setResultCode(-1);
            ajaxResultJsonBean.setResultMessage("商家账号不能为空");
            ajaxResultJsonBean.setOther(null);

            JSONObject ajaxResultJsonData = JSONObject
                    .fromObject(ajaxResultJsonBean);

            this.result = ajaxResultJsonData.toString();
            
            return SUCCESS;
        }

        if (!StarCloudStringUtils.isMobile(merchantAccount)) {

            ajaxResultJsonBean.setIsOK(false);
            ajaxResultJsonBean.setData(null);
            ajaxResultJsonBean.setResultCode(-2);
            ajaxResultJsonBean.setResultMessage("商家账号格式不合法");
            ajaxResultJsonBean.setOther(null);

            JSONObject ajaxResultJsonData = JSONObject.fromObject(ajaxResultJsonBean);

            this.result = ajaxResultJsonData.toString();
            
            return SUCCESS;
        }

        。。。
        MerchantBean checkMerchantBean = merchantIService.findMerchantByAccount(merchantAccount);

        if (checkMerchantBean != null) {

            ajaxResultJsonBean.setIsOK(true);
            ajaxResultJsonBean.setData(null);
            ajaxResultJsonBean.setResultCode(0);
            ajaxResultJsonBean.setResultMessage("商家账号可用");
            ajaxResultJsonBean.setOther(null);

            JSONObject ajaxResultJsonData = JSONObject.fromObject(ajaxResultJsonBean);

            this.result = ajaxResultJsonData.toString();

            return SUCCESS;
        } else {
            ajaxResultJsonBean.setIsOK(false);
            ajaxResultJsonBean.setData(null);
            ajaxResultJsonBean.setResultCode(-3);
            ajaxResultJsonBean.setResultMessage("商家账号不存在");
            ajaxResultJsonBean.setOther(null);

            JSONObject ajaxResultJsonData = JSONObject.fromObject(ajaxResultJsonBean);

            this.result = ajaxResultJsonData.toString();
            return SUCCESS;
        }
    }
    /**
     * 
     * AJAX for check MerchantAccount start end
     * 
     * */

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>

    <!-- AJAX 
    1.引入Jar包
    2.所在包必须要继承自JSON-default
    3.resultType是JSON
    4.附加了一个参数excludeNullProperties,目的是不序列化Action里为null的字段。
    5.<result>元素没有name属性,也没有跳转值 
    -->
    <package name="struts_web_product_ajax" extends="json-default">
         <!-- 新增商品信息检查账号 -->
        <action name="checkMerchantAccountAction" class="controllers.actions.web.product.PrepareAddProductAction" method="checkMerchantAccountMethod">
            <result type="json">  
                <param name="excludeNullProperties">true</param>  
                <param name="root">result</param>
            </result> 
         </action>     
    </package>  
</struts>

JS中接受返回结果:

返回JSON格式:

js接受数据

function checkMerchantAccountAjax() {

    var $merchantAccount = $("#merchantAccount");
    var merchantAccount = $merchantAccount.val();

    $.ajax({
                url : "checkMerchantAccountAction",
                type : "GET",
                data : "merchantAccount=" + merchantAccount,
                success : function(data, textStatus) {
                    var resultJSONData = JSON.parse(data);//注意这里必须有,因为之前返回的是result="json字符串",但并类型不是JSON
                    if(resultJSONData.isOK){
                            $merchantAccount.css("color", "black");
                            return true;
                    }else{
                        $merchantAccount.css("color", "red");
                        layer.tips(resultJSONData.resultMessage,$merchantAccount, {
                                        tips : [3, '#3595CC'],
                                        time : 4000
                        });//end tips
                        return false;
                    }//end else
                    
                }//end success
            });//end ajax
}// end js



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Struts2响应 JSON 数据并设置响应头可以通过以下步骤完成: 1. 创建一个 Java 类作为 Action,该类用于处理请求并返回 JSON 数据。 ```java public class MyAction extends ActionSupport { private String jsonData; // getter and setter for jsonData public String execute() { // 处理请求并生成 JSON 数据 jsonData = "{\"key\":\"value\"}"; return SUCCESS; } } ``` 2. 在 `struts.xml` 配置文件中设置该 Action 的结果类型为 JSON。 ```xml <struts> <package name="default" extends="struts-default"> <action name="myAction" class="com.example.MyAction"> <result type="json"> <param name="root">jsonData</param> </result> </action> </package> </struts> ``` 3. 在 Action 中设置响应头。 ```java public class MyAction extends ActionSupport { private String jsonData; // getter and setter for jsonData public String execute() { // 处理请求并生成 JSON 数据 jsonData = "{\"key\":\"value\"}"; // 设置响应头 HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType("application/json"); return SUCCESS; } } ``` 通过在 Action 中获取 HttpServletResponse 对象,可以设置响应头的内容类型为 "application/json"。 这样,当请求触发该 Action 时,Struts2 将会通过 JSON 结果类型将 JSON 数据返回给客户端,并设置响应头的内容类型为 "application/json"。 请注意,以上代码仅为示例,你需要根据自己的需求进行相应的定制和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值