Ну, я работаю над простым проектом с весенним mvc и спящим режимом, и все работает нормально на данный момент, но есть кое-что, что я не могу понять почему это происходит в моем коде. У меня есть страница JSP с пользовательской формой и списком ролейЯ не верну свой объект должным образом в свой ModelAttribute после заполнения формы
вот мой код формы с пружинной формой:
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
.
.
.
<form:form action="saveUser" method="POST" modelAttribute="user">
<label>First name:</label>
<form:input path="firstName"/>
<br><br>
<label>Last name:</label>
<form:input path="lastName"/>
<br><br>
<label>Email:</label>
<form:input path="email"/>
<br><br>
<label>Login:</label>
<form:input path="login"/>
<br><br>
<label>Password:</label>
<form:password path="pwd" />
<br><br>
<label>Role:</label>
<form:select path="role">
<form:options items="${roles}" itemLabel="description" itemValue="id_role" />
</form:select>
<br><br>
<input class="add-button" type="submit" value="Add" />
</form:form>
.
.
Хорошо, поэтому, когда я представляю, образую я ловлю его на моем Контроллер Я правильно получаю свой «пользовательский» объект, который был заполнен, НО объект «роль» не был. Например, я выбрал роль «administrator» с ID = 2 и DESCRIPTION = «administrator», поэтому, когда я его получу, я просто найду что-то вроде этого {ID = 0, DESCRIPTION = 2}!
@RequestMapping("/saveUser")
public String saveUser(@ModelAttribute("user") User user) {
System.out.println(user.getRole()); // its gives => [id = 0, description = 2]
int roleId = Integer.parseInt(user.getRole().getDescription()); // normally here I have to write user.getRole().getId() but you know that the id came inside description :(
Role r = roleService.getById(roleId);
user.setRole(r);
userService.save(user);
return "redirect:/user/list";
}
Его дует мой разум .. спасибо за помощь мне
Update
Вот Роль и RoleServiceImpl
Role.java
@Entity @Table(name = "ROLES")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id_role;
private String description;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "role")
private List<User> users;
public Role() {
}
public Role(String description) {
super();
this.description = description;
}
public Role(String description, List<User> users) {
super();
this.description = description;
this.users = users;
}
public int getId_role() {
return id_role;
}
public void setId_role(int id_role) {
this.id_role = id_role;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
@Override
public String toString() {
return "Role [id=" + id_role + ", description=" + description + "]";
}
}
RoleServiceImpl .java
@Service
public class RoleServiceImpl implements IService<Role> {
@Autowired
private IDAO<Role> roleDAO;
@Override
@Transactional
public List<Role> getAll() {
return roleDAO.getAll();
}
@Override
@Transactional
public void save(Role role) {
roleDAO.save(role);
}
@Override
@Transactional
public Role getById(int roleId) {
return (Role) roleDAO.getById(roleId);
}
@Override
@Transactional
public void delete(int roleId) {
roleDAO.delete(roleId);
}
}
Update Мой roleDAO: @Repository общественного класса RoleDAOImpl реализует IDAO {
@Autowired
SessionFactory sessionFactory;
@Override
public List<Role> getAll() {
Session session = sessionFactory.getCurrentSession();
List<Role> roles =
session.createQuery("from Role order by description", Role.class)
.getResultList();
return roles;
}
@Override
public Role getById(int roleId) {
Session session = sessionFactory.getCurrentSession();
Role role = session.get(Role.class, roleId);
return role;
}
@Override
public void save(Role role) {
Session session = sessionFactory.getCurrentSession();
session.saveOrUpdate(role);
}
@Override
public void delete(int roleId) {
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery("delete from Role where id=:roleId");
query.setParameter("roleId", roleId);
query.executeUpdate();
}
}
как вы построить список ролей? –
Hey @IssamELATIF Im, создавая его следующим образом: '@RequestMapping ("/addForm ") public String addUser (модель) { Пользователь user = new Пользователь(); Список role = roleService.getAll(); model.addAttribute («пользователь», пользователь); model.addAttribute («роли», роли); вернуть «пользователей/добавить»; } ' –
amine1401
Ваш код кажется правильным для меня. Я не знаю, почему у вас такое поведение! Я даю вашему коду попытку, и это сработало для меня. Если эта проблема повторяется, попробуйте использовать карту вместо списка. См. Мой ответ –