Во-первых, если вы хотите вернуть данные за пределы ActionForward
, вы должны return null
.Когда Struts видит ноль ActionForward
, он не выполняет пересылку.
После того, как это сделано, я использовал следующую конструкцию шрифта для создания ответа JSON в Struts:
public interface Result {
public void applyResult(HttpServletRequest request, HttpServletResponse response) throws Exception;
}
public abstract class ResultBasedAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
Result result = execute(mapping, form, request);
if (result == null) {
throw new Exception("Result expected.");
}
result.applyResult(request, response);
//Finally, we don't want Struts to execute the forward
return null;
}
public abstract Result execute(ActionMapping mapping, ActionForm form, HttpServletRequest request) throws Exception;
}
public class JsonResult implements Result {
private JSONObject json;
public JsonResult(JSONObject json) {
this.json = json;
}
public void applyResult(HttpServletRequest request, HttpServletResponse response) throws Exception {
response.addHeader("Content-Type", "application/json");
response.getOutputStream().write(json.toString().getBytes("UTF-8"));
response.getOutputStream().flush();
}
}
Во всех ваших ответах, связанных с AJAX, будет реализовано ResultBasedAction
для действия и Result
для данных, отправляемых клиенту.
В вашем ajax вам просто нужно будет выполнить HTTP GET
, передавая все параметры по URL.Убедитесь, что параметры соответствуют вашим Struts ActionForm
для требуемого Action
класса.