相关疑难解决方法(0)

Spring MVC:复杂对象为GET @RequestParam

假设我有一个列出表中对象的页面,我需要放置一个表单来过滤表.过滤器作为Ajax GET发送到如下URL:http://foo.com/system/controller/action?page = 1&prop1 = x&prop2 = y&prop3 = z

而不是在我的控制器上有很多参数,如:

@RequestMapping(value = "/action")
public @ResponseBody List<MyObject> myAction(
    @RequestParam(value = "page", required = false) int page,
    @RequestParam(value = "prop1", required = false) String prop1,
    @RequestParam(value = "prop2", required = false) String prop2,
    @RequestParam(value = "prop3", required = false) String prop3) { ... }
Run Code Online (Sandbox Code Playgroud)

假设我有MyObject:

public class MyObject {
    private String prop1;
    private String prop2;
    private String prop3;

    //Getters and setters
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想做的事情如下:

@RequestMapping(value = "/action") …
Run Code Online (Sandbox Code Playgroud)

java spring-mvc

175
推荐指数
4
解决办法
17万
查看次数

如何在Spring-mvc中使用Session属性

你能帮我写一下这个代码的spring mvc风格模拟吗?

 session.setAttribute("name","value");
Run Code Online (Sandbox Code Playgroud)

以及如何将一个注释@ModelAttribute注释的元素添加到会话中,然后获取对它的访问权限?

session servlets spring-mvc

100
推荐指数
5
解决办法
33万
查看次数

spring中的form标签中的modelAttribute和commandName属性之间的区别?

在Spring 3中,我在jsp中的form标签中看到了两个不同的属性

<form:form method="post" modelAttribute="login">
Run Code Online (Sandbox Code Playgroud)

在此属性modelAttribute是表单对象的名称,其属性用于填充表单.我用它来发布一个表单,在控制器中,我习惯于@ModelAttribute捕获值,调用验证器,应用业务逻辑.这里一切都很好.现在

<form:form method="post" commandName="login">
Run Code Online (Sandbox Code Playgroud)

这个属性的期望是,它还是一个表单对象,我们将填充它们的属性?

forms spring-mvc modelattribute

91
推荐指数
3
解决办法
8万
查看次数

Spring:@ModelAttribute VS @RequestBody

如果我错了,请纠正我.两者都可用于数据绑定.

问题是何时使用@ModelAttribute?

@RequestMapping(value="/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST)
public String processSubmit(@ModelAttribute Pet pet) { }
Run Code Online (Sandbox Code Playgroud)

另外,何时使用@RequestBody?

@RequestMapping(value = "/user/savecontact", method = RequestMethod.POST
public String saveContact(@RequestBody Contact contact){ }
Run Code Online (Sandbox Code Playgroud)

根据我的理解,两者都有类似的用途.

谢谢!!

data-binding spring spring-mvc

48
推荐指数
5
解决办法
3万
查看次数

@ModelAttribute注释,什么时候使用它?

假设我们有一个实体Person,一个控制器PersonController和一个edit.jsp页面(创建一个新的或编辑一个现有的人)

调节器

@RequestMapping(value = "/edit", method = RequestMethod.POST)
public String editPerson(@RequestParam("fname") String fname, Model model) {
    if(fname == null || fname.length() == 0){
        model.addAttribute("personToEditOrCreate", new Person());
    }
    else{
        Person p = personService.getPersonByFirstName(fname);
        model.addAttribute("personToEditOrCreate", p);
    }

    return "persons/edit";
}

@RequestMapping(value = "/save", method = RequestMethod.POST)
public String savePerson(Person person, BindingResult result) {

    personService.savePerson(person);
    return "redirect:/home";
}
Run Code Online (Sandbox Code Playgroud)

文件edit.jsp

<form:form method="post" modelAttribute="personToEditOrCreate" action="save">
    <form:hidden path="id"/> 
    <table>
        <tr>
            <td><form:label path="firstName">First Name</form:label></td>
            <td><form:input path="firstName" /></td>
        </tr>
        <tr>
            <td><form:label path="lastName">Last Name</form:label></td>
            <td><form:input path="lastName" /></td>
        </tr>
        <tr> …
Run Code Online (Sandbox Code Playgroud)

annotations spring-mvc

35
推荐指数
1
解决办法
8万
查看次数

Spring MVC:将请求属性绑定到控制器方法参数

在Spring MVC中,很容易将请求参数绑定到处理请求的方法参数.我只是用@RequestParameter("name").但是我可以对请求属性执行相同的操作吗?目前,当我想访问请求属性时,我必须执行以下操作:

MyClass obj = (MyClass) request.getAttribute("attr_name");
Run Code Online (Sandbox Code Playgroud)

但我真的想用这样的东西代替:

@RequestAttribute("attr_name") MyClass obj
Run Code Online (Sandbox Code Playgroud)

不幸的是,它没有这种方式.我可以以某种方式扩展Spring功能并添加我自己的"绑定器"吗?

编辑 (我想要实现的目标):我将当前登录的用户存储在请求属性中.因此,每当我想访问当前登录的用户(这几乎都在每个方法中)时,我必须编写这个额外的行user = (User) request.getAttribute("user");.我想尽量缩短它,最好将它作为方法参数注入.或者,如果您知道如何通过拦截器和控制器传递某些东西,我会很高兴听到它.

java spring spring-mvc

21
推荐指数
2
解决办法
7万
查看次数

无法实例化Pageable bean

我使用Spring 4.1.6.RELEASE和Spring Data Jpa 1.8.0.RELEASE.我有org.springframework.data.domain.Pageable bean创建的问题.它在我的控制器中使用:

@Controller
public class ItemsController {

    @Autowired
    ProductService itemsService;

    @RequestMapping(value = "/openItemsPage")
    public String openItemsPage() {
        return "items";
    }

    @RequestMapping(value = "/getItems", method = RequestMethod.GET)
    @ResponseBody
    public Item[] getItems(Pageable pageable) {

        return itemsService.getItems(pageable);
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,我在我的应用程序上下文中有下一个xml配置:

<context:component-scan base-package="com.mobox.controller" />

<mvc:annotation-driven>
    <mvc:argument-resolvers>
        <beans:bean id="sortResolver"
                class="org.springframework.data.web.SortHandlerMethodArgumentResolver" />
        <beans:bean
                class="org.springframework.data.web.PageableHandlerMethodArgumentResolver">
            <beans:constructor-arg ref="sortResolver" />
        </beans:bean>
    </mvc:argument-resolvers>
</mvc:annotation-driven>
Run Code Online (Sandbox Code Playgroud)

最后,我做了客户的下一次重新计划:

   $.ajax({
        type: "GET",
        url: "getProducts?page=0&size=100",
        .....
Run Code Online (Sandbox Code Playgroud)

在tomcat日志中我看到下一个:

    SEVERE: Servlet.service() for servlet [appServlet] in context with path [/a2delivery-web] threw exception [Request processing …
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc spring-data-jpa

17
推荐指数
2
解决办法
1万
查看次数