Как я могу обновить свою модель данных сессий на странице веб-приложения java-сервлета фронт-контроллера без перезагрузки веб-страницы?

У меня есть MVC-структурированное веб-приложение. у меня есть оба application-, session-, а также request данных в области, и я использую пользовательскую среду MVC на основе запросов, похожую на Spring и Struts. Я использовал ответ на этот вопрос в качестве учебника.

У меня есть объект Java называется ShowModel, который передается как данные области сеанса. Я использую это для отслеживания выбора пользователями видимых компонентов на веб-страницах.

Все возможные варианты видимости представлены флажком. Все они установлены по умолчанию для видимого / проверенного при первой установке данных сеанса.

У меня есть прослушиватель на всех флажках, который регистрирует изменения, по имени класса "toggle", и отправляет его идентификатор и checked / unchecked статус по ajax серверу / сервлету. См. Пример кода 1. Я хочу сказать, что мой опыт работы с ajax очень ограничен.

Поскольку все мои вызовы перехватываются моим сервлетом Front Controller, мне нужно было выполнить соответствующее действие, чтобы выполнить ajax POST -запрос. Этот код был успешно достигнут и выполнен. Смотрите пример кода 2.

Моя проблема, однако, заключается в том, что мой шаблон действий вызывает перенаправления. И каким-то таинственным образом текст ответа ajax-объекта оказывается полностью HTML -страницей моей индексной страницы.

Моя модель данных уже обновлена, но, как оказалось, это неправильный подход из-за паттерна стратегии фронт-контроллера.

Так кто-нибудь знает, как я могу обновить переменные объекта моей области сеанса, не перезагружая всю страницу?

Пример кода 1

$(document).ready(
    function() {
        $('.toggle').change(function() {        
            var id = this.value;
            var checked = this.checked; 

            var json = new Object();
            json.id = id;
            json.checked = checked;

            $.ajax({
                    url: "selectionmodelupdate",
                    type: 'POST',
                    dataType: 'json',
                    data: JSON.stringify(json),
                    contentType: 'application/json',
                    mimeType: 'application/json',

                    success: function (data) {
                        $('.event').each(function (index, event) {
                            //Here I will put code, to update the ".event"'s to be visible or not

                        }); 
                    },
                    error:function(data,status,er) {
                        console.log(arguments);
                        alert("error: "+data+" status: "+status+" er:"+er);
                    }
            });

        });
    });
});

Пример кода 2

    public class SelectionModelUpdateAction implements Action {

    @Override
    public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {

        HttpSession session = request.getSession();
        ShowModel showModel = (ShowModel) session.getAttribute("showmodel");
        AppData appData = AppData.getInstance();
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8"); 

        BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));
        String json = "";
        if(br != null){
            json = br.readLine();
        }

        JsonObject jsonobject = new JsonParser().parse(json).getAsJsonObject();    
        boolean checked = jsonobject.get("checked").getAsBoolean();

        String id = jsonobject.get("id").getAsString();

        if(id.equals("A")){
            showModel.setASelected(checked);
            response.getWriter().write("{isSuccess: true}");
            return "index";
        }
        else if (id.equals("B")){
            showModel.setBSelected(checked);
            response.getWriter().write("{isSuccess: true}");
            return "index";
        }
        else if (id.equals("C")){
            showModel.setCSelected(checked);
            response.getWriter().write("{isSuccess: true}");
            return "index";
        }
        response.getWriter().write("{isSuccess: false}");
        return "index";
    }
}

0 ответов

Другие вопросы по тегам