我正在尝试编写Struts 2 Action,它接受常规HTTP请求以及基于Ajax的HTTP请求,到目前为止我已经提出了这个问题:
定义内容类型和操作扩展名:
<constant name="struts.action.extension" value="do,json"></constant>
<result-type name="json" class="org.apache.struts2.json.JSONResult">
<param name="contentType">text/plain</param>
</result-type>
使用两种结果类型定义操作
<action name="xyz" class="com.abc.actions.TestAction">
<result name="success">testoutput.jsp</result>
<result name="json" type="json"></result>
</action>
public class TestAction implements Action {
public String execute() throws Exception {
// do whatever you want here. also add setters and getters for the JSON resposne to work
HttpServletRequest request = ServletActionContext.getRequest();
String ext = request.getRequestURL().substring(request.getRequestURL().lastIndexOf(".") + 1);
if(StringUtils.isNotEmpty(ext) && ext.equals("json")) {
return "json";
}
return "success";
}
所以,当我运行http://{domain}/xyz.do
时,它运作得很好。
但是,运行http://{domain}/xyz.json
只会返回一个空页面。
处理没有例外。我不知道该怎么办。我尝试用不同的东西(比如“jsp”)替换.json扩展名并且它有效。
我也是Struts(以及Java)的新手,所以请提醒我,如果我错过了任何重要的信息。