我正在使用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);
}
});
上面的代码正确调用了动作类中的正确函数但有两个问题。
我在返回时在服务器端遇到以下错误。
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做了类似的事情,但我似乎无法想出这个,所以如果你能提供帮助,我们将不胜感激。
答案 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);
}
});