我想知道,如果Struts 2核心jar必须与Struts2-Json-Plugin jar同步。因为当我从Action类中的方法返回'SUCCESS'时,就会发生异常。我在我的xml中将结果类型声明为'json'为
<result-type name="json" class="org.apache.struts2.json.JSONResult"/>
我得到的例外是
java.lang.NoSuchMethodError: com.opensymphony.xwork2.ActionContext.get(Ljava/lang/String;)Ljava/lang/Object;
at org.apache.struts2.json.JSONResult.execute(JSONResult.java:166)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:348)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
我正在使用struts2-core-2.0.11.jar,我的struts.xml是
<action name="editEmployee" class="myaction.AddEmployeeAction" method="getValue">
<result name="success" type="json" />
</action>
我的行动是
public class AddEmployeeAction extends ActionSupport implements ParameterAware {
/**
*
*/
private static final long serialVersionUID = 1L;
private EmployeeDaoImp empdao;
private Map parameters;
public EmployeeDaoImp getEmpdao() {
return empdao;
}
public void setEmpdao(EmployeeDaoImp empdao) {
this.empdao = empdao;
}
public String getValue() throws Exception
{
//JSONArray jsonArr = new JSONArray();
JSONObject jsonObject = new JSONObject();
String query = getParameterValue("selChar");
List<String> names = empdao.getData(query);
/*for (String name : names) {
jsonArr.add(name);
}*/
jsonObject.put("namesList", names);
return SUCCESS;
}
}
答案 0 :(得分:4)
S2插件版本必须与S2版本匹配;插件使用struts2-core提供的机制。
虽然插件可能使用不同版本的核心,但它永远不会像那样进行测试,所以除非你提供自己的测试工具,否则会在那里进行测试。如果你随机开始混合和匹配,无法知道行为是什么。你应该不混合搭配。