如何在springwebmvc中使用ajaxjquery

vybvopom  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(163)

我正在使用springwebmvc作为我的应用程序。
我的jsp视图中有一个下拉列表,来自下面的请求 savegroup.htm ```









jsp页具有:

<form:form name="groupSaveForm" action="savegroup.htm" commandName="Group" method="POST">
Group Name :
<form:input path="source"/>
Domain List :
<form:select id="domains" onchange="javascript:getUser();" path="domainsList" multiple="false" size="1">
<form:option value="-" label="--Select--"/>
<form:options items="${domainsList}" itemValue="domain" itemLabel="domain"/>
</form:select>
</form:form>

现在我的要求是,在下拉列表的change事件中,我希望从服务器获取相关的用户,并在某个列表框中显示该用户列表。
为此,如何使用jqueryajax调用?
我应该在哪里处理接收请求并获取相关用户的服务器端代码?
如何在我的jsp中显示即将到来的用户集?
ogsagwnx

ogsagwnx1#

有很多方法可以解决这个问题。我需要一些问题的答案,然后才能给你可靠的指导。
对于ajax请求,您对xml和json有偏好吗?
需要注意的一点是,对于我要告诉您做的事情,jquery并没有什么特别之处。您需要以对jquery有用的形式(理想情况下是xml或json)发回对jquery异步请求的响应,但是在服务器端,它看起来就像一个普通的请求,碰巧使用了一个呈现xml或json而不是html的视图。我个人的偏好是使用json,特别是因为springjson包工作得非常好,一旦您了解了它的工作原理,它就很容易使用。我推荐SpringJSON包,可以从http://spring-json.sourceforge.net/ 通读所有的文档,你应该对它的工作原理有一个很好的了解。
在最基本的形式中,您的解决方案需要执行以下操作:
配置一个使用springjson视图的noe的视图。大多数情况下我更喜欢sojoview。
向服务器发出异步请求,服务器将返回用户列表。如果传递用户集所需的唯一信息是下拉列表的selected值,那么在查询字符串中使用所选域发出get请求就相当简单了。在服务器端,您需要一个控制器,它将Map到传入的请求,并将json或xml发送回jquery处理。基本上,您可以编写一个完全正常的控制器,无论是通过get还是post方法访问,并在返回json视图的名称之前将用户列表添加到模型中。springjson提供的3种类型的json视图将把列表中的bean呈现为json结构并发送给客户机。您可以使用所有标准的databinder功能来解析/转换传入参数,任何验证错误都将在json响应中生成字段或全局错误消息,您的客户端代码可以将这些消息呈现给用户。
在最简单的情况下,我的代码看起来像这样(这都是Spring2.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请求进行处理,并且我想从提交的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模块。假设您有一个id为“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,其id类似于“userlist”,您可以在返回的json中迭代用户,为每个用户创建html。只需将该html添加到“userlist”div,它就会出现在浏览器中。

pbwdgjma

pbwdgjma2#

定义url的控制器
如果要使用post方法:

content.load('URL(.)or(#)sectionToLoad', {}, function(event) {
...
});

或者,如果要使用get方法:

content.load('URL(.)or(#)sectionToLoad', function(event) {
...
});

用如下函数调用它 .click 或者 .submit 然后呢´就这样

相关问题