3

我正在使用 Strut2 运行 Glassfish Web 服务器,我想从操作类中提取 json 数据以获取页面而无需刷新页面。我的意思是,当用户更改设置时,我想自动显示更新的数据而不刷新页面。

对 Strut2 操作类进行 Ajax 调用似乎是我的解决方案,但我的所有 Google 搜索结果都是针对需要刷新页面的情况。

动作类:

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

    return SUCCESS;
}
...

strut.xml:

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

阿贾克斯调用:

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

上面的代码在动作类中正确调用了正确的函数,但有两个问题。

  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 依赖项。

第二件事是您可以将 id 作为参数访问 url

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