在没有页面刷新的情况下对Struts2进行ajax调用

时间:2012-12-29 03:25:06

标签: java jquery ajax struts2 glassfish

我正在使用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>

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

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

  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)
    
  3. 我对strut2很新,我知道我用ajax和struts做了类似的事情,但我似乎无法想出这个,所以如果你能提供帮助,我们将不胜感激。

1 个答案:

答案 0 :(得分:2)

您需要将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);
             }
        });