3

Strut2 を使用して Glassfish Web サーバーを実行しています。ページを更新せずに、ページのアクション クラスから json データを取得したいと考えています。つまり、ユーザーが設定を変更すると、ページを更新せずに更新されたデータを自動的に表示したいということです。

Strut2アクションクラスへのAjax呼び出しを行うことは私の解決策のようですが、私のGoogle検索はすべて、ページの更新が必要な場合に結果をもたらしました。

アクション クラス:

...
@Override
public String execute() throws Exception {
    result = "\"{\"age\":100,\"name\":\"dude\"}"; 

    return SUCCESS;
}
...

ストラット.xml:

<package name="default" namespace="/" extends="json-default">
    <action name="getData" class="action.getData" method="execute">
        <result type="json" />
    </action>
</package>

ajax 呼び出し:

jQuery.ajax(
{
    type: 'POST', 
    url: '/proj/getData', 
    data: {id: $('#id').val()},
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    success: function(data){         
        alert(data.result);
    },
    error: function(XMLHttpRequest, textStatus, errorThrown){
        alert('Error ' + textStatus);
        alert(errorThrown);
        alert(XMLHttpRequest.responseText);
    }
}); 

上記のコードは、アクション クラスの正しい関数を正しく呼び出しますが、2 つの問題があります。

  1. サーバー側で ajax 呼び出しのデータ セクションにある ID データ セットを取得する方法がわかりません。
  2. リターン時にサーバー側で次のエラーが発生します。

    WARNING: StandardWrapperValve[default]: PWC1406: Servlet.service() for servlet default threw exception
      java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
      at org.apache.struts2.json.SerializationParams.<init>(SerializationParams.java:57)
      at org.apache.struts2.json.JSONResult.writeToResponse(JSONResult.java:207)
      at org.apache.struts2.json.JSONResult.execute(JSONResult.java:171)
    

私はstrut2が初めてで、ajaxとstrutsで同様のことをしたことは知っていますが、これを理解できないようですので、助けていただければ幸いです。

4

1 に答える 1

3

apache common langクラスパスまたはWEB-INF/Libにパッケージを追加する必要があります。ここで入手できます http://commons.apache.org/lang/ または、mavenを使用している場合は、maven依存関係として追加できます。

2つ目は、URLへのパラメーターとしてidにアクセスできることです。

String id= request.getParameter("id");リクエストオブジェクトを取得するには、Actionクラスがservletrequestawareを実装している必要があります。

public class BaseAction extends ActionSupport implements ServletRequestAware {

protected HttpServletRequest request = null;


@Override
public void setServletRequest(HttpServletRequest request) {
    this.request = request;
}

@Override
public String execute() throws Exception {
   String id= request.getParameter("id");
   result = "\"{\"age\":100,\"name\":\"dude\"}"; 

   return SUCCESS;
}

}

idパラメーターをGETリクエストとして渡すこともできます。

jQuery.ajax(
        {
            type: 'GET', 
            url: '/proj/getData?id='+$('#id').val(), 
            //data: {id: $('#id').val()},
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            success: function(data){         
                alert(data.result);

             },
             error: function(XMLHttpRequest, textStatus, errorThrown){
                 alert('Error ' + textStatus);
                 alert(errorThrown);
                 alert(XMLHttpRequest.responseText);
             }
        }); 
于 2012-12-29T03:37:20.723 に答える