JQuery модальные формы с Struts 1,3 - PullRequest
4 голосов
/ 22 ноября 2011

Я создаю веб-приложение, используя Struts 1.3 для проекта класса, и у меня возникают некоторые проблемы с совместимостью AJAX Struts 1.x (я слышал, что 2.x намного лучше с AJAX и jQuery). 1001 *

Спасибо за ответ, это обновленная проблема:

В настоящее время я использую модальную форму пользовательского интерфейса jquery в том же jsp и хочу отправить данные формы в Struts Action, когда пользователь нажимает «создать новое место» с помощью AJAX. Как мне отправить (и получить) данные между формой и действием Struts?

Другими словами, связь между:

"Create new venue": function() {
$.ajax({
    url: "/registered/insertVenue.do",
    data: 
});

(это код моей кнопки sumbit для модальной формы, я не знаю, как прикрепить данные таким образом, чтобы их можно было прочитать с помощью действия Struts)

и метод execute действия Struts Action (который возвращает ActionForward или null).

Еще раз спасибо! :)

Ответы [ 2 ]

4 голосов
/ 22 ноября 2011

Во-первых, если вы хотите вернуть данные за пределы 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 класса.

3 голосов
/ 22 ноября 2011

Фреймворк действительно не имеет большого значения с точки зрения необработанного JavaScript / jQuery / Ajax.

Вы можете вернуть все, что захотите, из своего действия Struts 1. Если вы хотите вернуть JSON, например, с сообщением о статусе или Flash, вы можете либо записать его непосредственно в ответ и вернуть null вместо ActionForward, либо создать JSP-файл с требуемым содержимым и установить соответствующий заголовок.

Как обрабатывается возвращаемое значение Ajax-запроса, все зависит от кода на стороне клиента: Struts 1 не заботится о типе запроса; он будет просто выплевывать то, что настроено на сплит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...