加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

自定义属性编辑器不适用于Spring MVC中的请求参数吗?

发布时间:2020-12-15 01:18:37 所属栏目:大数据 来源:网络整理
导读:我正在尝试使用Spring注释创建一个多动作Web控制器.该控制器将负责添加和删除用户概要文件,并为jsp页面准备参考数据. @Controllerpublic class ManageProfilesController { @InitBinder public void initBinder(WebDataBinder binder) { binder.registerCust

我正在尝试使用Spring注释创建一个多动作Web控制器.该控制器将负责添加和删除用户概要文件,并为jsp页面准备参考数据.

@Controller
public class ManageProfilesController {
    @InitBinder
    public void initBinder(WebDataBinder binder) { 
        binder.registerCustomEditor(UserAccount.class,"account",new UserAccountPropertyEditor(userManager)); 
        binder.registerCustomEditor(Profile.class,"profile",new ProfilePropertyEditor(profileManager));
        logger.info("Editors registered");
    }

    @RequestMapping("remove")
    public void up( @RequestParam("account") UserAccount account,@RequestParam("profile") Profile profile) {
        ...
    }

    @RequestMapping("")
    public ModelAndView defaultView(@RequestParam("account") UserAccount account) {
        logger.info("Default view handling");
        ModelAndView mav = new ModelAndView();
        logger.info(account.getLogin());
        mav.addObject("account",account);
        mav.addObject("profiles",profileManager.getProfiles());
        mav.setViewName(view);
        return mav;
    }
    ...
}

这是我的webContext.xml文件的一部分:

<context:component-scan base-package="ru.mirea.rea.webapp.controllers" />
<context:annotation-config/>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
            <value>
               ...
              /home/users/manageProfiles=users.manageProfilesController
            </value>
    </property>
</bean>

<bean id="users.manageProfilesController" class="ru.mirea.rea.webapp.controllers.users.ManageProfilesController">
    <property name="view" value="homeusersmanageProfiles"/>
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

但是,当我打开映射的URL时,出现异常:

java.lang.IllegalArgumentException: Cannot convert value of type [java.lang.String] to required type [ru.mirea.rea.model.UserAccount]: no matching editors or conversion strategy found

我使用Spring 2.5.6,并计划在不远的将来迁移到Spring 3.0.但是,根据JIRA https://jira.springsource.org/browse/SPR-4182,应该已经可以在春季2.5.1中使用它了.

调试显示正确调用了InitBinder方法.

我究竟做错了什么?

更新:

public class UserAccountPropertyEditor extends PropertyEditorSupport {
    static Logger logger = Logger.getLogger(UserAccountPropertyEditor.class);

    public UserAccountPropertyEditor(IUserDAO dbUserManager) {
        this.dbUserManager = dbUserManager;
    }

    private IUserDAO dbUserManager;

    public String getAsText() {
        UserAccount obj = (UserAccount) getValue();
        if (null==obj) {
                return "";
        } else {
            return obj.getId().toString();
        }
    }

    public void setAsText(final String value) {
        try {   
            Long id = Long.parseLong(value);
            UserAccount acct = dbUserManager.getUserAccountById(id);
            if (null!=acct) {
                super.setValue(acct);
            } else {
                logger.error("Binding error. Cannot find userAccount with id  ["+value+"]");
                throw new IllegalArgumentException("Binding error. Cannot find userAccount with id  ["+value+"]");
            }
        } catch (NumberFormatException e) {
            logger.error("Binding error. Invalid id: " + value);
            throw new IllegalArgumentException("Binding error. Invalid id: " + value);
        }
    }
}

没有从UserAccountPropertyEditor记录的错误.

最佳答案
我认为您不想为WebDataBinder.registerCustomEditor()指定字段参数.它旨在与支持表单的对象一起使用,并且您没有使用它.

尝试使用更简单的2-arg方法,它应该可以工作:

binder.registerCustomEditor(UserAccount.class,new UserAccountPropertyEditor(userManager)); 
binder.registerCustomEditor(Profile.class,new ProfilePropertyEditor(profileManager));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读