1

ActionクラスにAjax リクエストを送信し、 Result.
ここに私のjQueryコードがあります:

$('#button').click(function(){                    
            $.get('ajax.action','query="hi server:)")',function(x,r,s){                    
            alert("server said :"+r+"-stat-"+s.status);                    
            })

ここでは、応答は常に「成功」​​であり、期待される応答ではありません。
これが私の Action クラスの execute() です。

String response;
String query;
     @Override
    public String execute() throws Exception {

        response=query+" - Struts added :";        

        setResponse(response);

        return SUCCESS;
    }  

文字列応答とクエリの getter と setter が記述されています (ここには示されていません)。
これが私のResultクラス です

public class AjaxResponse implements Result {

@Override
public void execute(ActionInvocation ai) throws Exception {

    System.out.println("I am the Ajax Rsponse RESULT");// this is displayed in the console
     PrintWriter out =
                ServletActionContext.getResponse().getWriter();
    try {
        ServletActionContext.getResponse().setContentType("text/plain");

        ValueStack valueStack = ai.getStack();
       // Object resObj= valueStack.findValue("response");
        out.print("hi I am server ...");

        System.out.println("Response WROTE---");
    } catch (Exception e) {
        e.printStackTrace();

    }finally{

    out.close();
        System.out.println("Response Close "); // this is displayed in the console
    }        
}

}

Result クラスを struts.xml に追加する方法は次のとおりです。

 <result-types>        
        <result-type name="ajaxResponse" class="com.app.ajax.AjaxResponse" />  
 </result-types>  

これが私がアクションを宣言した方法です

<action name="ajax" class="com.app.action.AjaxSupport">
        <result type="ajaxResponse"/>
    </action>

アラートは、期待される結果 'hi I am server ...' ではなく、常にSUCCESSのみを提供します。
コンソールに Result クラスの出力が表示されます-("I am the Ajax Response RESULT","Response WROTE---","Response Close") タスクを疎結合するために別の Result クラスを使用し、アクション内でビジネス ロジックを実行しましたクラス。
私の問題がどこにあるか教えてください。

4

1 に答える 1

1

問題はStrutsではなく、結果が正しいか間違っているかを確認するところにあります。

$.get('ajax.action', 'query="hi server")', function(x, r, s) {                    
    alert("server said: " + r + "-stat-" + s.status);              

このアラートによると、出力は次のとおりです。

server said: success-stat-200

問題はこの成功を見ていました。コールバック関数のパラメータと混同されました。

これが応答のステータスです(私'r'は応答だと思いました)、sはxmlHttpRequestオブジェクトです。

ではないことを確認する必要がありrましたが、xこれは実際の期待値です。x の値を出力すると、サーバーが送信した実際の値が表示されます。

于 2012-06-25T01:02:35.367 に答える