2013-07-05 2 views
1

Вот ситуацияПолучить результат Метода Действия статус в Ajax

В моей странице 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. То есть, если метод возвращает SUCCESS, а также оповещения на странице с "НЕ ДОСТУПНО !!!"

Я новичок в Ajax. Когда я искал, большинство сообщений посвящено возврату данных JSON. Я не хочу данных JSON. Мне нужен только статус результата и как получить это в Ajax?

+0

Какую версию стойки вы используете? – pikrut

+0

Я использую распорки2. –

ответ

2

Результат результата ajax в struts2 должен быть потоком. Попробуйте это в своем коде.

<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> 

И в вас класс действия. Вы должны создать переменный класс с геттер и сеттером

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") 
          } 
         }  
        }); 
      } 
     }); 
    }); 

потока данные будут возвращена строка «ошибка» или «успех». И он будет доступен в вашем успешном методе ajax на странице просмотра.

+0

Спасибо. Теперь он приходит только к успеху. Это не приведет к ошибке, даже если она задает ошибку в методе класса Action (всегда показывает ** «AVAILABLE!» ** alert). Нужно ли мне что-либо менять в сценарии Ajax Jquery? Спасибо –

+0

Как проверить, если ответ является ошибкой или успехом? –

+0

Первое условие всегда правильное. Это 'if (response.indexOf (" success ") == - 1)' всегда становится истиной и выдает соответствующее сообщение –