在Ajax中获取Action方法结果状态

时间:2013-07-05 05:11:57

标签: java jsp jquery struts2

情况如下

在我的JSP页面中,我正在调用一个动作类方法

<input type="text" class="inputstyle" name="feedName" id="feedName" placeholder="<s:text name="global.feed_name" />" required>

这是我的Ajax JQuery

$(document).ready(function() {
        $('#feedName').blur(function() {
            var feedName=$("#feedName").val();
            if(feedName!="")
            {
                $.ajax( {
                      traditional: true,
                      type: "POST",      
                      url: "feedCheck",
                      data:"feedName="+feedName,
                      dataType: "text",
                      success: function(response) {
                          alert("AVAILABLE!");
                      },
                      error: function(data) {
                          alert("NOT AVAILABLE!!!");
                      }       
                    });
            }
        });
    });

struts.xml中

<action name="feedCheck" method="feedCheck" class="com.analytic.webapp.action.AAIDCAIndexAction">
            <result name="success">DCAAnalytix.jsp</result>
            <result name="error">DCAAnalytix.jsp</result>
        </action>

动作类方法

public String feedCheck()
    {
        MClient client = (MClient) getRequest().getSession().getAttribute(
                AAI_CLIENT);
        List<String> feedNamesFromDB=mFeedManager.getAllFeedNameByClient(client.getClientKey());
        System.out.println(feedName);
        if(feedNamesFromDB.size()>0){
            if(feedNamesFromDB.contains(feedName)){
                return ERROR;
            }
        }
        return SUCCESS;
    }

ajax调用正常工作并调用action类方法并执行。但问题是,结果总是在Ajax中出错。也就是说,如果该方法返回 SUCCESS ,那么网页也会警告“不可用!!!”

我是Ajax的新手。当我搜索时,大多数帖子都是关于返回JSON数据。我不想要JSON数据。我只需要结果状态以及如何在Ajax中获取它?

1 个答案:

答案 0 :(得分:2)

struts2中ajax的结果类型应该是一个流。在代码中尝试使用它。

<action name="feedCheck" method="feedCheck" class="com.analytic.webapp.action.AAIDCAIndexAction">
  <result type="stream">
    <param name="contentType">text/html</param>
    <param name="inputName">inputStream</param>
  </result>
</action>

在你的动作课上。 您应该使用getter和setter

创建类变量
private InputStream inputStream;

然后在你的方法中

public String feedCheck()
{
    MClient client = (MClient) getRequest().getSession().getAttribute(
            AAI_CLIENT);
    List<String> feedNamesFromDB=mFeedManager.getAllFeedNameByClient(client.getClientKey());
    System.out.println(feedName);
    if(feedNamesFromDB.size()>0)
    {
        if(feedNamesFromDB.contains(feedName))
        {
            this.setInputStream(new ByteArrayInputStream(ERROR.getBytes()));
        }
        else
        {
            this.setInputStream(new ByteArrayInputStream(SUCCESS.getBytes()));
        }
    }
    else
    {
        this.setInputStream(new ByteArrayInputStream(SUCCESS.getBytes()));
    }

    return SUCCESS;

}

希望这会奏效。

并在您的视图页面

$(document).ready(function() {
        $('#feedName').blur(function() {
            var feedName=$("#feedName").val();
            if(feedName!="")
            {
                $.ajax( {
                      traditional: true,
                      type: "POST",      
                      url: "feedCheck",
                      data:"feedName="+feedName,
                      dataType: "text",
                      success: function(data, success) {
                          if(data.indexOf("success")==-1){
                                  alert("Action returned Error")
                           }else{
                                 alert("Action returned Success") 
                           }
                      }      
                    });
            }
        });
    });

流数据将返回String“error”或“success”。它将在视图页面中的ajax成功方法中提供。