【问题标题】:Spring MVC + Hibernate AppSpring MVC + Hibernate 应用程序
【发布时间】:2014-03-18 01:31:20
【问题描述】:

我也有一个应用程序(Spring MVC + Hibernate)和 AppFuse 框架。

我有两个实体:UserRobot 具有多对一关系。

我需要将所有者 (User) 的下拉列表添加到 Robot 表单 (robotForm.jsp)。

Robot 实体有一个User。我读到我必须为User 创建一个自定义Editor。 (UserCustomEditor extends PropertyEditorSupport) 并在RobotFormController 中覆盖referenceData 并添加initBinder

RobotFormController

protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) {
  SimpleDateFormat dateFormat = new SimpleDateFormat(getText("date.format"));
  dateFormat.setLenient(false);
  binder.registerCustomEditor(Date.class, null, 
  new CustomDateEditor(dateFormat, true));
  binder.registerCustomEditor(Long.class, null,
        new CustomNumberEditor(Long.class, null, true));
  binder.registerCustomEditor(User.class, new UserEditor(userManager));
}

// ...
protected Map referenceData(HtppServletRequest request) throws Exception {
  Map ownersMap = new HashMap();
  ownersMap.put("owners", userManager.getUsers();
  return ownersMap;
}

userManager.getUsers(); 返回用户列表。

UserEditor(也许这是我的错误)。

public class UserEditor extends PropertyEditorSupport {

  private final UserManager userManager;
  protected final transient Log log = LogFactory.getLog(getClass());

  public UserEditor(UserManager userManager) throws IllegalArgumentException {
    this.userManager = userManager;
  }

  @Override
  public void setAsText(String text) throws IllegalArgumentException {
   if (text != null && text.length() > 0) {
     try {
          User user = userManager.getUser(new String (text));
                    super.setValue(user);
         } catch (NumberFormatException ex) {
                    throw new IllegalArgumentException();
         }
      } else {
            super.setValue(null);
            }
     }

  @Override
  public String getAsText() {
    User user = (User) super.getValue();
    return  (user != null ? (user.getId()+"").toString(): "");
  }

} 

robotForm.jsp

<form:select path="owner" itemValue="id" itemLabel="name" items="${owners}"
</form:select>  

我在 ownersMap.put("owners", userManager.getUsers(); 方法的referenceData 行。

编辑:

UserManagerImpl

@Service(value = "userManager")
public class UserManagerImpl implements UserManager {
@Autowired
UserDao dao;

public void setUserDao(UserDao dao) {
    this.dao = dao;
}

public List getUsers() {
    return dao.getUsers();
}

public User getUser(String userId) {
    return dao.getUser(Long.valueOf(userId));
}

public void saveUser(User user) {
    dao.saveUser(user);
}

public void removeUser(String userId) {
    dao.removeUser(Long.valueOf(userId));
}
}

Robot.java

public class Robot extends BaseObject {
    private static final long serialVersionUID = -1932852212232780150L;
    private Long id;
    private String name;
    private Date birthday;
    private User owner;

    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public User getOwner() {
        return owner;
    }
    public void setOwner(User owner) {
        this.owner = owner;
    }
}

【问题讨论】:

  • userManager 为空。你是实例化还是注入它?向我们展示完整的代码。
  • 已编辑,RobotFormController 有一个 userManager 的实例。
  • 您的 RobotFormController 在哪里?并向我们​​展示 bean 配置。
  • 已编辑。添加机器人.java。 User.java 看起来像 Robot.java。 Robot.hbm.xml (Hibernate Configuration) 是多对一的关系。

标签: java spring hibernate jsp


【解决方案1】:

我看到的唯一原因是,'userManager' 没有被实例化。

您可以检查是否通过(userManager == null)。 您的代码对我来说看起来不错,而不是研究逻辑。我认为您对 Spring 的 IoC 的配置是这里的问题。

您能否发布您的 *.xml 文件。 这将有助于解决您的问题。

干杯!

【讨论】:

  • 感谢您的回答。我可以用robotManager修复它。我使用robotManager 来获取用户。 (robotManager.getUsers() 方法)。我认为我的错误没有将 UserManager 与 RobotFormController 关联起来。或者至少我是这么读的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
  • 2016-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多