相关疑难解决方法(0)

Spring中的ConversionService

我在Spring应用程序中遵循此方案.

  1. 请求被发送到服务器,其中包含对象的id以及要在此对象中填充的其他一些参数
  2. 具有此id的对象从数据库加载
  3. 在此对象中调用getter和setter以填充值
  4. 然后存储该对象

我在另一个问题中询问,在填充请求的参数之前,准备对象的最佳方法是什么.答案是最好的方法是使用转换服务,而不是在@ModelAtribute注释方法中或在initBinder中使用编辑器.

所以我试图使用转换器,但我没有找到类似的例子,我有点卡住了.我编写了如下代码:在init binder中我注册了转换服务.因此,在填充User对象上的值之前,会调用convert()方法从数据库加载对象.问题是这个配置不起作用,因为它将对象用户的id(用户名字段)转换为Object用户,但是它尝试用对象创建一个setUsername(),所以我得到一个"java.lang" .IllegalArgumentException:参数类型不匹配".

任何人都可以给我一个线索或使用ConversionService获得所需行为的方式的示例吗?

谢谢.

@Autowired
private ConversionService conversionService;

@InitBinder("user")
public void initBinder(@RequestParam("username")String username, WebDataBinder binder){
    binder.setConversionService(conversionService);
}

@RequestMapping(value="/user/save", method=RequestMethod.POST)
public String save(@ModelAttribute("user") User user, Model model) {        
    ...
}
Run Code Online (Sandbox Code Playgroud)

有类似的东西:

@Component
public class UserConversionService implements ConversionService{
    ...        
    @Override
    public Object convert(Object name, TypeDescriptor arg1, TypeDescriptor arg2) {
        return userService.find((String)name); 
    }
}
Run Code Online (Sandbox Code Playgroud)

java data-binding spring converter spring-mvc

25
推荐指数
1
解决办法
3万
查看次数

当从jsp组合表单对象时,Spring mvc缺少依赖集合的id

我有以下控制器返回视图:

@RequestMapping(value = "/admin/adminUsers", method = RequestMethod.GET)
    public String adminUsers(ModelMap model, HttpSession session) {
        Set<TerminalAdmin> users = terminalAdminService.getAllAdmins();
        session.setAttribute("users", users);
        model.addAttribute("adminRoles", terminalAdminService.findAllAdminRoles());
        model.addAttribute("terminalAdmin", new TerminalAdmin());
        model.addAttribute("generatedPassword", PasswordUpdateStatus.generatePassword());
        return "admin/adminUsers";
    }

terminalAdminService.findAllAdminRoles()
Run Code Online (Sandbox Code Playgroud)

返回带有id的集合:

在此输入图像描述

在jsp上我渲染它像这样:

<form:form modelAttribute="terminalAdmin" action="/admin/addNewAdmin">
    ...
    <form:checkboxes items="${adminRoles}" path="adminRoles"/>
    ...
</form:form>
Run Code Online (Sandbox Code Playgroud)

我有以下控制器来接受这个对象:

@RequestMapping(value = "/admin/addNewAdmin")
    public String adminUsers(@ModelAttribute @Valid TerminalAdmin terminalAdmin...){
      ....
}
Run Code Online (Sandbox Code Playgroud)

在调试中,我看到terminalAdminadminRoles没有id.

在此输入图像描述

如何解决这个问题?

PS

当我保存实体时,它是Dependent collection重复的继续

java spring-mvc spring-mvc-initbinders spring-form

7
推荐指数
1
解决办法
212
查看次数

Spring MVC表单:选择Tag,多个选项不正确绑定?

我正在尝试创建一个表单来编辑现有的数据库行.我正在使用Spring MVC表单标记将html自动绑定到表单后备对象.该行与另一个表有多对多的关系,我试图使用以下形式表示多个选择框:select tag;

<form:select path="rules">
    <form:options items="${bundle.rules}" itemValue="name" itemLabel="name"/>
</form:select>
Run Code Online (Sandbox Code Playgroud)

我正在使用Hibernate进行持久化,因此该关系表示为Bundle pojo中的HashSet.

 private Set<Rule> rules = new HashSet<Rule>(0);
Run Code Online (Sandbox Code Playgroud)

如果没有页面上的选择框,对象将正确更新到数据库,但是使用选择框,对象将不会更新到数据库,并且我在log4j日志中收到此错误,请注意此错误不会导致异常,它只在日志中可见;

DEBUG org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:256) - Data binding errors: 1
Run Code Online (Sandbox Code Playgroud)

无论我取消选择框内的项目,都会发生这种情况,整个表单拒绝正确提交.谁能帮我?

我知道如何将集合属性绑定到Spring MVC中的表单,这与此问题类似,遗憾的是,没有任何建议对我的问题有用.

spring hibernate jsp-tags spring-mvc

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