Я рекомендую создать ветку или даже отдельный репозиторий для экспериментов. Затем, как только функция будет завершена, вы можете объединить код из ветви обратно в основную часть кода. Надеюсь, это позволит вам получить лучшее из обоих миров.
Есть несколько способов решить эту проблему. Мне нужно несколько ответов на вопросы, прежде чем я смогу дать вам четкое руководство.
Вы предпочитаете 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", и он появится в браузере.