弹簧形式:选择不默认为保存对象

时间:2013-07-09 22:08:31

标签: java forms spring select spring-mvc

我有一个表示Role对象的表单。此角色对象可以有一个System对象,该对象通过下拉列表(form:select)选择。除了一个小障碍外,它的工作原理很完美:编辑Role对象时,不会在列表中自动选择System对象。根据我的理解,应该。任何人都可以告诉我为什么它不是吗?代码如下:

角色等级:

/**
 * Represents a Role in the Database. Used for tracking purposes it allows us to
 * find out what users and systems have certain roles. Role entity. @author
 * MyEclipse Persistence Tools
 */
@Entity
@Table(name = "roles", catalog = "jess")
public class Role implements java.io.Serializable {
// Fields
    private static final long serialVersionUID = -8599171489389401780L;
    private Integer roleId;
    @Valid
    private System system;

    ...

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "SYSTEM_ID")
    public System getSystem() {
        return this.system;
    }

    public void setSystem(System system) {
        this.system = system;
    }

控制器:

    @RequestMapping(value = "/" + MappingConstants.EDIT_ROLE + "/{id}", 
                    method = RequestMethod.POST)
    public ModelAndView getEditRoleForm(@PathVariable("id") Integer id) 
    {   
        Role r = new Role();
        r.setRoleId(id);
        Role role = roleService.searchAllRolesByID(r);

        ModelAndView modelView = new ModelAndView(MappingConstants.ROLES_FOLDER + MappingConstants.EDIT_ROLE);
        modelView.addObject(AttributeConstants.ROLE, role);

        List<System> systems = systemService.searchAllSystems();
        modelView.addObject(AttributeConstants.ALL_SYSTEMS, systems);

        return modelView;
    }

属性编辑器:

public class SystemEditor extends PropertyEditorSupport 
{   
    private final ISystemService systemService;

    private static Logger logger = LogManager.getLogger(SystemEditor.class.getName());

    public SystemEditor(ISystemService service) 
    {
        super();
        this.systemService = service;
    }

    /*
     * (non-Javadoc)
     * @see java.beans.PropertyEditorSupport#setAsText(java.lang.String)
     */
    public void setAsText(String text) throws IllegalArgumentException 
    {       
        try 
        {
            if(logger.isDebugEnabled())
                logger.debug("System value coming in the editor as: {}", text);

            System system = systemService.searchAllSystemsById(Integer.valueOf(text));

            setValue(system);
        } 
        catch (Exception e) 
        {
            logger.error("There was an error attempting to process the System from the Editor.", e);
        }

    }

    /*
     * (non-Javadoc)
     * @see java.beans.PropertyEditorSupport#getAsText()
     */
    public String getAsText() 
    {
        System system = (System) getValue();

        return system.getSystemId().toString();
    }
}

和jsp:

<form:form method="post" action="${contextPath}/jess/saveeditedrole" modelAttribute="role">   
                              <h2>${role.name}</h2>
                              <br/><br/>

                              <form:errors path="system"/>
                              <form:label path="system">System:</form:label>
                              <form:select path="system">
                                <form:options items="${systems}" itemValue="systemId" itemLabel="fullName"/>

                              </form:select>

1 个答案:

答案 0 :(得分:0)

form:select你正在使用System课程。确保此类具有正确的.equals()hashCode()方法,否则Spring不知道如何判断选择了哪个System对象。