Как использовать Ajax JQuery в сети Spring MVC

Я рекомендую создать ветку или даже отдельный репозиторий для экспериментов. Затем, как только функция будет завершена, вы можете объединить код из ветви обратно в основную часть кода. Надеюсь, это позволит вам получить лучшее из обоих миров.

23
задан Filip Spiridonov 26 February 2013 в 03:49
поделиться

1 ответ

Есть несколько способов решить эту проблему. Мне нужно несколько ответов на вопросы, прежде чем я смогу дать вам четкое руководство.

Вы предпочитаете XML или JSON для запросов ajax?

Следует отметить одну вещь - нет ничего конкретного jquery в том, что я собираюсь делать скажу тебе делать. Вам нужно отправить ответ на асинхронный запрос jquery в форме, которая полезна для jquery (в идеале XML или json), но на стороне сервера это просто выглядит как обычный запрос, который использует представление, которое отображает XML. или json вместо html. Лично я предпочитаю использовать JSON, тем более что пакет spring-json работает очень хорошо и его легко использовать, если вы понимаете, как он работает. Я рекомендую пакет spring-json, доступный по адресу http: //spring-json.sourceforge. net / Прочтите всю документацию, и вы должны иметь очень хорошее представление о том, как это работает.

В самом простом виде ваше решение должно делать следующее:

Настроить представление, которое использует noe of представления spring-json. В большинстве случаев я предпочитаю sojoView.

сделать асинхронный запрос к серверу, который вернет список пользователей. Если единственная информация, необходимая для доставки набора пользователей, - это выбранное значение в раскрывающемся списке, было бы довольно просто отправить запрос GET с выбранным доменом в строке запроса. На стороне сервера вам нужен контроллер, который будет сопоставлен с входящим запросом и отправит обратно json или xml для обработки jquery. В основном вы можете написать совершенно нормальный контроллер, независимо от того, доступен ли он методом GET или POST, и добавьте свой список пользователей в модель, прежде чем возвращать имя вашего json-представления. Три типа представления json, предоставляемые spring-json, будут отображать beans в вашем списке в структуру json и отправлять ее клиенту. Вы можете использовать все стандартные функции DataBinder для синтаксического анализа / преобразования входящих параметров, и любые ошибки проверки будут генерировать полевые или глобальные сообщения об ошибках в json-ответе, который ваш клиентский код может представить пользователю.

В простейшем случае my код будет выглядеть примерно так (это все Spring 2.5. Он использует аннотации, но вы можете сделать то же самое с конфигурацией xml в контексте вашего приложения.):

@Controller
public class AjaxController {

    @RequestMapping("/some/path/selectDomain.json", method=RequestMethod.GET)
    public ModelAndView processDomainSelection(@RequestParam(value="domain", required="true") String selectedDomain) {
        List<User> users = service.loadUsersForDomain(selectedDomain);
        ModelAndView mv = new ModelAndView("sojoView", "users", users);
        return mv;
    }
}

Если я хочу обрабатывать через запрос POST, и я хочу загрузить реальный объект Domain из отправленного domainValue, я могу сделать что-нибудь вроде этого

@Controller
@RequestMapping("/some/path/selectDomain.json")
public class SelectDomainController {
    public class FormBean {
        protected Domain domain;
        public Domain getDomain() {
            return domain;
        }
        public void setDomain(Domain domain) {
            this.domain = domain;
        }
    }

    @ModelAttribute("command")
    public FormBean getCommand() {
        return new FormBean();
    }

    @InitBinder
    public void initBinder(WebDataBinder binder, WebRequest request) {
        // this custom editor knows how to load a Domain object from the domainValue string
        // if it fails to convert, it can throw an exception, which will result in 
        // an error being logged against the "domain" field
        binder.registerCustomEditor(Domain.class, "domain", new DomainLookupEditor(domainService));
    }

    @RequestMapping(method=RequestMethod.POST)
    public String selectedDomain(@ModelAttribute("command") FormBean command,
                                       BindingResult result,
                                       Model model,
                                       HttpServletRequest request) {
        if (result.hasErrors()) {
            return "sojoView";
        }
        Domain domain = command.getDomain();
        List<User> users = domain.getUsers();
        model.addAttribute("users", users);
        return "sojoView";
    }
}

Для выдачи запроса ajax, вы можете использовать модуль jquery ajaxForm. Предполагая, что у вас есть форма с идентификатором "selectDomainForm", вам понадобится js, который выглядит примерно так:

function selectDomainSuccessHandler(json) {
    // it is possible to send back a 200 response after failing to process the request,
    // in which case, the sojoView will have set success=false in the json
    if (json.success == true) {
        // parse json here and render it into html in your document
    } else {
        // get field error and global error from json and present to user
    }
}

function(selectDomainErrorHandler(xhr, returnCode) {
    // do something based on the return code
}

var options = {
    success: selectDomainSuccessHandler,
    error: selectDomainErrorHandler,
    dataType: 'json'
};

$('selectDomainForm').ajaxForm(options);

Вы можете найти в Google документацию для модуля ajaxForm, чтобы узнать, как отправлять сообщения вместо получения и отправлять захват только определенных полей и отправьте их по URL-адресу, который не является предполагаемым URL-адресом формы.

Чтобы отобразить список пользователей на странице, у вас будет div в вашем коде с идентификатором, подобным "userList", и вы можете перебирать пользователей в возвращенном json, создавая html для каждого пользователя. Просто добавьте этот HTML-код в div "userList", и он появится в браузере.

function selectDomainSuccessHandler(json) {
    // it is possible to send back a 200 response after failing to process the request,
    // in which case, the sojoView will have set success=false in the json
    if (json.success == true) {
        // parse json here and render it into html in your document
    } else {
        // get field error and global error from json and present to user
    }
}

function(selectDomainErrorHandler(xhr, returnCode) {
    // do something based on the return code
}

var options = {
    success: selectDomainSuccessHandler,
    error: selectDomainErrorHandler,
    dataType: 'json'
};

$('selectDomainForm').ajaxForm(options);

Вы можете найти в Google документацию по модулю ajaxForm, чтобы узнать, как публиковать, а не получать и отправлять захват только определенных полей и отправлять их по URL-адресу, который не является предполагаемым URL-адресом формы.

Чтобы отобразите список пользователей на странице, у вас будет div в вашем коде с идентификатором типа «userList», и вы можете перебирать пользователей в возвращенном json, создавая html для каждого пользователя. Просто добавьте этот HTML-код в div "userList", и он появится в браузере.

function selectDomainSuccessHandler(json) {
    // it is possible to send back a 200 response after failing to process the request,
    // in which case, the sojoView will have set success=false in the json
    if (json.success == true) {
        // parse json here and render it into html in your document
    } else {
        // get field error and global error from json and present to user
    }
}

function(selectDomainErrorHandler(xhr, returnCode) {
    // do something based on the return code
}

var options = {
    success: selectDomainSuccessHandler,
    error: selectDomainErrorHandler,
    dataType: 'json'
};

$('selectDomainForm').ajaxForm(options);

Вы можете найти в Google документацию по модулю ajaxForm, чтобы узнать, как публиковать, а не получать и отправлять захват только определенных полей и отправлять их по URL-адресу, который не является предполагаемым URL-адресом формы.

Чтобы отобразите список пользователей на странице, в вашем коде будет div с идентификатором типа «userList», и вы можете перебирать пользователей в возвращенном json, создавая html для каждого пользователя. Просто добавьте этот HTML-код в div "userList", и он появится в браузере.

35
ответ дан 29 November 2019 в 02:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: