i try built app with spring and hibernate. i build applicatin that have diferrent roles and user. i want my application flexibel to add or remove the roles with checkboxes. i already successfuly show roles for spesific user. but i have trouble to edit the roles of spesific user with checkboxes. i already sech in stackoverflow to solve this problem. my user entity have many-to-many relationship with role entity. what i have to with my entity, Dao,service, controller and JSP files?
user.java
@Entity
@Table
public class User {
@Id
@GeneratedValue
private int id;
private String userName;
private String email;
private String password;
private boolean enabled;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable
private List<Role> roles;
/**
@OneToOne
private Employee employee;
**/
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public List<Role> getRoles() {
return roles;
}
public void setRoles(List<Role> roles) {
this.roles = roles;
}
/**
* @return the enabled
*/
public boolean isEnabled() {
return enabled;
}
/**
* @param enabled the enabled to set
*/
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
}
role.java
@Entity
@Table
public class Role {
@Id
@GeneratedValue
private int id;
private String name;
@ManyToMany(fetch = FetchType.EAGER,mappedBy="roles", cascade = CascadeType.ALL)
private List<User> users;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
}
UserDaoImpl.java
@Repository
public class UserDaoImpl implements UserDao{
private static final Logger logger = LoggerFactory.getLogger(UserDaoImpl.class);
@Autowired
private SessionFactory sessionFactory;
@Autowired
private RoleDao roleDao;
public User findById(int id) {
return (User)sessionFactory.getCurrentSession().get(User.class, id);
}
@SuppressWarnings("unchecked")
public List<User> findAll() {
Session session = this.sessionFactory.getCurrentSession();
List<User> userList = session.createQuery("from User").list();
return userList;
}
public void save(User user) {
Session session = this.sessionFactory.getCurrentSession();
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
user.setPassword(encoder.encode(user.getPassword()));
List<Role> roles = new ArrayList<Role>();
//roles.add(roleDao.findById(2));
roles.add(roleDao.findByName("ROLE_USER"));
user.setRoles(roles);
session.persist(user);
}
public void update(User user) {
Session session = this.sessionFactory.getCurrentSession();
session.update(user);
logger.info("Employee Status updated successfully, departement Details="+user);
}
public void delete(int id) {
sessionFactory.getCurrentSession().delete(findById(id));
}
public User findOne(int id) {
return (User)sessionFactory.getCurrentSession().get(User.class, id);
}
public User findOneWithRole(int id) {
User user = findById(id);
List<Role> roles = roleDao.findByUser(id);
//user.setRoles(roles);
return user;
}
public void saveRoles(User user) {
Session session = this.sessionFactory.getCurrentSession();
//List<Role> roles = new ArrayList<Role>();
//user.setRoles(roles);
session.persist(user);
}
}
UserServiceImpl.java
@Service
public class UserServiceImpl implements UserService{
@Autowired
private UserDao userDao;
@Autowired
private RoleDao roleDao;
@Transactional
public User findById(int id) {
return userDao.findById(id);
}
@Transactional
public List<User> findAll() {
return userDao.findAll();
}
@Transactional
public void save(User user) {
user.setEnabled(true);
userDao.save(user);
}
@Transactional
public void update(User user) {
userDao.update(user);
}
@Transactional
public void delete(int id) {
userDao.delete(id);
}
@Transactional
public User findOne(int id) {
return userDao.findOne(id);
}
@Transactional
public User findOneWithRole(int id) {
return userDao.findOneWithRole(id);
}
@Transactional
public void saveRoles(User user) {
userDao.saveRoles(user);
}
}
UserController.java
@Controller
public class UserController {
@Autowired
private UserService userService;
@Autowired
private RoleService roleService;
@RequestMapping(value="user", method = RequestMethod.GET)
public String list(Model model) {
model.addAttribute("user", new User());
model.addAttribute("userlist", this.userService.findAll());
return "user";
}
//for add and edit
@RequestMapping(value= "/addAndEditUser", method = RequestMethod.POST)
public String addAndEditUser(@ModelAttribute("user") User user){
if(user.getId() == 0){
//new employee status, call save
this.userService.save(user);
}else{
this.userService.update(user);
}
return "redirect:/user";
}
//For add
@RequestMapping(value= "/addUser", method = RequestMethod.POST)
public String addUser(@ModelAttribute("user") User user){
//new employee status, call save
this.userService.save(user);
return "redirect:/user";
}
//for edit
@RequestMapping(value= "/updateUser", method = RequestMethod.POST)
public String updateUser(@ModelAttribute("user") User user){
//existing Employee status, call update function from service
userService.update(user);
return "redirect:/user";
}
@RequestMapping("/removeUser/{id}")
public String removeUser(@PathVariable("id") int id){
this.userService.delete(id);
return "redirect:/user";
}
//for call edit in list
@RequestMapping("/editUser/{id}")
public String editUser(@PathVariable("id") int id, Model model){
model.addAttribute("religionlist", this.userService.findAll());
model.addAttribute("user", this.userService.findById(id));
return "formUser";
}
@RequestMapping("/users/{id}")
public String detail(Model model, @PathVariable int id){
model.addAttribute("users", userService.findOneWithRole(id));
return "user-detail";
}
@RequestMapping(value= "/addAndEditUserRoles", method = RequestMethod.POST)
public String addAndEditUserRoles(@ModelAttribute("users") User user, BindingResult result, @PathVariable int id){
List<Role> roles = new ArrayList<Role>();
user.getRoles();
this.userService.saveRoles(user);
return "user-detail";
}
}
user.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://ift.tt/1bjwgjt" prefix="tiles"%>
<%@ taglib uri="http://ift.tt/QfKAz6" prefix="c"%>
<%@ taglib uri="http://ift.tt/18bwTB1" prefix="spring"%>
<%@ taglib uri="http://ift.tt/IED0jK" prefix="form"%>
<script type="text/javascript">
$(document).ready(function(){
$(".triggerRemove").click(function(e){
e.preventDefault();
$("#modalRemove .removeBtn").attr("href", $(this).attr("href"));
$("#modalRemove").modal();
});
});
</script>
<div id="page-wrapper">
<div class="container-fluid">
<!-- Page Heading -->
<div class="row">
<div class="col-lg-12">
<h1 class="page-header">User</h1>
<ol class="breadcrumb">
<li><i class="fa fa-dashboard"></i> <a href="/">Dashboard</a>
</li>
<li class="active"><i class="fa fa-table"></i>User</li>
</ol>
</div>
</div>
<!-- /.row -->
<div class="page-content">
<div class="col-md-9">
<div class="panel panel-green">
<div class="panel-heading">User</div>
<div class="panel-body">
<table class="table table-hover table-bordered">
<thead>
<tr>
<th>ID</th>
<th>User Name</th>
<th>Email</th>
<th>Operation</th>
</tr>
</thead>
<tbody>
<c:forEach items="${userlist}" var="userlist">
<tr>
<td><a ><c:out value="${userlist.id}" /></a></td>
<td><a href='<spring:url value="/users/${userlist.id}" />'><c:out value="${userlist.userName}" /></a></td>
<td><a><c:out value="${userlist.email}" /></a></td>
<td align="center">
<a href="<c:url value='/editUser/${userlist.id}' />">
<span class="glyphicon glyphicon-edit"></span>
</a>
<a href="<spring:url value='/removeUser/${userlist.id}' />" class="btn btn-danger triggerRemove" >
Remove
</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
<!-- Delete Modal -->
<div class="modal fade" id="modalRemove" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Delete User</h4>
</div>
<div class="modal-body">
Are you sure want to delete this user?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">cancel</button>
<a href="" class="btn btn-danger removeBtn">Remove</a>
</div>
</div>
</div>
</div>
<br>
<!--ADD Button trigger modal -->
<button type="button" class="btn btn-primary btn-lg"
data-toggle="modal" data-target="#myModal">Add
User</button>
<!-- ADD Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog"
aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="myModalLabel">Form
User</h4>
</div>
<div class="modal-body">
<!-- ----- -->
<div class="panel-body">
<c:url var="addAndEditAction" value="/addAndEditUser"></c:url>
<form:form action="${addAndEditAction}" commandName="user">
<table>
<tr>
<td><form:label path="userName">
<spring:message text="Name" />
</form:label></td>
<td> <form:input path="userName" /></td>
</tr>
<tr>
<td><form:label path="email">
<spring:message text="Email" />
</form:label></td>
<td> <form:input path="email" /></td>
</tr>
<tr>
<td><form:label path="password">
<spring:message text="Password" />
</form:label></td>
<td> <form:input path="password" /></td>
</tr>
</table>
<br>
<button type="button" class="btn btn-default"
data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary" value="">Save
</button>
</form:form>
</div>
<!-- -------- -->
</div>
<div class="modal-footer"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
User-detail.jsp
<h1>${users.userName}</h1>
<br>
User Role
<form:form modelAttribute="users" method="POST" action="/addAndEditUserRoles">
<c:forEach items="${users.roles}" var="role">
<tr>
<td><form:checkbox path="roles" value="${role}" label="${role.id}" /></td>
<td><c:out value="${role.name}" /></td>
</tr>
<!-- <td>${role.name}</td>-->
<tr>
<td colspan="3"><input type="submit" /></td>
</tr>
</c:forEach>
</form:form>
currently the roles only show up the roles that already add manualy in database with the checkboxs checked. for example user admin only show 2 roles Role_admin and Role_user. the rest user not show up like Role_spv and Role_Master. how i show all roles in spesific user so i can edit user role more flexsible with checkboxs?
what i have to do with my entity, Dao,service, controller and JSP files?
thanks
Aucun commentaire:
Enregistrer un commentaire