我有很多员工和服务。我创建了一项服务,当我选择创建一个员工时,选择了那些希望能够分配员工的员工。我的问题是jsp页面我想看看有多少服务已分配给员工但是当我按下保存服务时没有分配给员工。这是我的代码。谢谢你的帮助。
@Entity
@Table(name="EMPLOYEE")
public class Employee
{
@Id
@Column(name="EMPLOYEE_ID")
@GeneratedValue
private Integer employeeId;
@Pattern(regexp = ".{2,40}", message = "invalid format")
@Column(name="FIRSTNAME")
private String firstname;
@Pattern(regexp = ".{2,40}", message = "invalid format")
@Column(name="LASTNAME")
private String lastname;
@NotEmpty
@Pattern(regexp="(^$|[0-9]{10})", message = "invalid format")
@Column(name="MOBILE")
private String mobile;
@NotEmpty
@Email
@Column(name="EMAIL")
private String email;
@ManyToMany(fetch=FetchType.EAGER, cascade = {CascadeType.ALL})
@JoinTable(name="Employee_MarketServiceRelation",
joinColumns={@JoinColumn(name="EMPLOYEE_ID")},
inverseJoinColumns={@JoinColumn(name="MARKETSERVICE_ID")})
private List<MarketService> servicesList = new ArrayList<>();
public List<MarketService> getServicesList()
{
return servicesList;
}
public void setServicesList(List<MarketService> servicesList)
{
this.servicesList = servicesList;
}
public Integer getEmployeeId() {
return employeeId;
}
public void setEmployeeId(Integer employeeId) {
this.employeeId = employeeId;
}
public String getFirstname()
{
return firstname;
}
public void setFirstname(String firstname)
{
this.firstname = firstname;
}
public String getLastname()
{
return lastname;
}
public void setLastname(String lastname)
{
this.lastname = lastname;
}
public String getMobile()
{
return mobile;
}
public void setMobile(String mobile)
{
this.mobile = mobile;
}
public String getEmail()
{
return email;
}
public void setEmail(String email)
{
this.email = email;
}
@Override
public String toString()
{
return getEmployeeId() + " " + getFirstname() + " " + getLastname() + " " + getMobile() + " " + getEmail();
}
}
@Entity
@Table(name="MARKETSERVICE")
public class MarketService
{
@Id
@Column(name="MARKETSERVICE_ID")
@GeneratedValue
private Integer marketServiceId;
@Pattern(regexp = ".{2,40}", message = "invalid format")
@Column(name="NAME")
private String name;
@NotNull
@NumberFormat(style = Style.NUMBER)
@Column(name="PRICE")
private BigDecimal price;
@Pattern(regexp = "[0-9]+", message = "invalid format")
@Column(name="DURATIONINMINUTES")
private String durationInMinutes;
@ManyToMany(mappedBy="servicesList")
List<Employee> employee = new ArrayList<>();
public List<Employee> getEmployee()
{
return employee;
}
public void setEmployee(List<Employee> employee)
{
this.employee = employee;
}
public Integer getMarketServiceId()
{
return marketServiceId;
}
public void setMarketServiceId(Integer marketServiceId)
{
this.marketServiceId = marketServiceId;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price)
{
this.price = price;
}
public String getDurationInMinutes()
{
return durationInMinutes;
}
public void setDurationInMinutes(String durationInMinutes)
{
this.durationInMinutes = durationInMinutes;
}
@Override
public String toString()
{
return getMarketServiceId() + " " + getName() + " " + getPrice() + " " + getDurationInMinutes();
}
}
@Repository
public class EmployeeDaoImpl implements EmployeeDao
{
@Autowired
private SessionFactory sessionFactory;
@Override
public List<Employee> employeeList()
{
return sessionFactory.getCurrentSession().createQuery("from Employee").list();
}
@Override
public void addEmployee(Employee employee)
{
sessionFactory.getCurrentSession().save(employee);
}
@Override
public void deleteEmployee(Integer id)
{
Employee employee = (Employee) sessionFactory.getCurrentSession().load(Employee.class, id);
if (null != employee)
{
sessionFactory.getCurrentSession().delete(employee);
}
}
@Override
public void editEmployee(Employee employee)
{
sessionFactory.getCurrentSession().update(employee);
}
@Override
public Employee getEmployeeById(Integer employeeId)
{
Session session = sessionFactory.getCurrentSession();
List<Employee> list = session.createQuery("from Employee e where e.employeeId = :employeeId").setParameter("employeeId", employeeId).list();
return list.size() > 0 ?(Employee)list.get(0): null;
}
}
@Repository
public class MarketServiceDaoImpl implements MarketServiceDao
{
@Autowired
private SessionFactory sessionFactory;
@Override
public List<MarketService> marketServiceList()
{
return sessionFactory.getCurrentSession().createQuery("from MarketService").list();
}
@Override
public void addMarketService(MarketService marketService)
{
sessionFactory.getCurrentSession().save(marketService);
}
@Override
public void deleteMarketService(Integer id)
{
MarketService marketService = (MarketService) sessionFactory.getCurrentSession().load(MarketService.class, id);
if (null != marketService)
{
sessionFactory.getCurrentSession().delete(marketService);
}
}
@Override
public void editMarketService(MarketService marketService)
{
sessionFactory.getCurrentSession().update(marketService);
}
@Override
public MarketService getMarketServiceById(Integer marketServiceId)
{
Session session = sessionFactory.getCurrentSession();
List<MarketService> list = session.createQuery("from MarketService m where m.marketServiceId = :marketServiceId").setParameter("marketServiceId", marketServiceId).list();
return list.size() > 0 ?(MarketService)list.get(0): null;
}
}
@Service
public class EmployeeServiceImpl implements EmployeeService
{
@Autowired
EmployeeDao employeeDao;
@Autowired
MarketServiceDao marketServiceDao;
@Override
@Transactional
public List<Employee> employeeList()
{
return employeeDao.employeeList();
}
@Override
@Transactional
public void addEmployee(Employee employee)
{
employeeDao.addEmployee(employee);
}
@Override
@Transactional
public void deleteEmployee(Integer id)
{
employeeDao.deleteEmployee(id);
}
@Override
@Transactional
public void editEmployee(Employee employee)
{
employeeDao.editEmployee(employee);
}
@Override
@Transactional
public Employee getEmployeeById(Integer employeeId)
{
return employeeDao.getEmployeeById(employeeId);
}
}
@Service
public class MarketServiceServiceImpl implements MarketServiceService
{
@Autowired
MarketServiceDao marketServiceDao;
@Override
@Transactional
public List<MarketService> marketServiceList()
{
return marketServiceDao.marketServiceList();
}
@Override
@Transactional
public void addMarketService(MarketService marketService)
{
marketServiceDao.addMarketService(marketService);
}
@Override
@Transactional
public void deleteMarketService(Integer id)
{
marketServiceDao.deleteMarketService(id);
}
@Override
@Transactional
public void editMarketService(MarketService marketService)
{
marketServiceDao.editMarketService(marketService);
}
@Override
@Transactional
public MarketService getMarketServiceById(Integer marketServiceId)
{
return marketServiceDao.getMarketServiceById(marketServiceId);
}
}
@Controller
public class EmployeeController
{
//static final Logger logger = Logger.getLogger(EmployeeController.class);
@Autowired
private EmployeeService employeeService;
@Autowired
private MarketServiceService marketServiceService;
@RequestMapping({"/employee"})
public String getEmployees(ModelMap map)
{
//logger.info("pobieram pracownikow");
map.addAttribute("lists", employeeService.employeeList());
return "employee";
}
@RequestMapping(value = "/employee/add", method = RequestMethod.GET)
public String getNewEmployeeForm(ModelMap map)
{
map.addAttribute("employee", new Employee());
map.addAttribute("lists", marketServiceService.marketServiceList());
return "employeeForm";
}
@RequestMapping(value = "/employee/add", method = RequestMethod.POST)
public String addEmployees(@Valid @ModelAttribute(value="employee") Employee employee, BindingResult result)
{
if(result.hasErrors())
{
return "employeeForm";
}
employeeService.addEmployee(employee);
return "redirect:/employee";
}
@RequestMapping({"/delete/{employeeId}"})
public String deleteEmployees(@PathVariable(value="employeeId") Integer employeeId)
{
employeeService.deleteEmployee(employeeId);
return "redirect:/employee";
}
@RequestMapping(value = "/employee/edit/{employeeId}", method = RequestMethod.GET)
public String getEmployeeForm(@PathVariable(value="employeeId") Integer employeeId, ModelMap map)
{
Employee employee = employeeService.getEmployeeById(employeeId);
map.addAttribute("employee", employee);
return "employeeForm";
}
@RequestMapping(value = "/employee/edit/{employeeId}", method = RequestMethod.POST)
public String editEmployee(@PathVariable(value="employeeId") Integer employeeId, @ModelAttribute(value="employee") Employee employee)
{
employee.setEmployeeId(employeeId);
employeeService.editEmployee(employee);
return "redirect:/employee";
}
}
@Controller
public class MarketServiceController
{
static final Logger logger = Logger.getLogger(MarketServiceController.class);
@Autowired
private EmployeeService employeeService;
@Autowired
private MarketServiceService marketServiceService;
@RequestMapping({"/marketService"})
public String getMarketService(ModelMap map)
{
//logger.info("pobieram uslugi");
map.addAttribute("lists", marketServiceService.marketServiceList());
return "marketService";
}
@RequestMapping(value = "/marketService/add", method = RequestMethod.GET)
public String getNewMarketServiceForm(ModelMap map)
{
map.addAttribute("marketService", new MarketService());
map.addAttribute("lists", employeeService.employeeList());
return "marketServiceForm";
}
@RequestMapping(value = "/marketService/add", method = RequestMethod.POST)
public String addMarketService(@Valid @ModelAttribute(value="marketService") MarketService marketService, BindingResult result)
{
if(result.hasErrors())
{
return "marketServiceForm";
}
marketServiceService.addMarketService(marketService);
return "redirect:/marketService";
}
@RequestMapping({"/marketService/delete/{marketServiceId}"})
public String deleteMarketService(@PathVariable(value="marketServiceId") Integer marketServiceId)
{
marketServiceService.deleteMarketService(marketServiceId);
return "redirect:/marketService";
}
@RequestMapping(value = "/marketService/edit/{marketServiceId}", method = RequestMethod.GET)
public String getMarketServiceForm(@PathVariable(value="marketServiceId") Integer marketServiceId, ModelMap map)
{
MarketService marketService = marketServiceService.getMarketServiceById(marketServiceId);
map.addAttribute("marketService", marketService);
return "marketServiceForm";
}
@RequestMapping(value = "/marketService/edit/{marketServiceId}", method = RequestMethod.POST)
public String editMarketService(@PathVariable(value="marketServiceId") Integer marketServiceId, @ModelAttribute(value="marketService") MarketService marketService)
{
marketService.setMarketServiceId(marketServiceId);
marketServiceService.editMarketService(marketService);
return "redirect:/marketService";
}
}
<table cellspacing='0'>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
<th>Mobile</th>
<th>Service</th>
<th>Action</th>
</tr>
<!-- Table Header -->
<c:forEach items="${lists}" var="employee">
<tr>
<td>${employee.firstname}</td>
<td>${employee.lastname}</td>
<td>${employee.email}</td>
<td>${employee.mobile}</td>
<td>${fn:length(employee.servicesList)}</td>
<td>
<a href="/controller/delete/${employee.employeeId}"><img src="<c:url value='/resources/images/delete.png' />"></a>
<a href="/controller/employee/edit/${employee.employeeId}"><img src="<c:url value='/resources/images/edit.png' />"></a>
</td>
</tr>
</c:forEach>
</table>
<form:form method="POST" commandName="employee">
<table>
<tr></tr>
<tr>
<td><form:label path="firstname">FirstName</form:label></td>
<td><form:input path="firstname" /> <form:errors
path="firstname" class="error_form" /></td>
</tr>
<tr>
<td><form:label path="lastname">LastName</form:label></td>
<td><form:input path="lastname" /> <form:errors
path="lastname" class="error_form" /></td>
</tr>
<tr>
<td><form:label path="email">Email</form:label></td>
<td><form:input path="email" /> <form:errors path="email"
class="error_form" /></td>
</tr>
<tr>
<td><form:label path="mobile">Mobile</form:label></td>
<td><form:input path="mobile" /> <form:errors path="mobile"
class="error_form" /></td>
</tr>
<tr>
<td><form:label path="">Service</form:label></td>
<td>
<form:select path="servicesList" items="${lists}" multiple="true" />
</td>
</tr>
<tr>
<td colspan="2"><input type="image"
src="<c:url value='/resources/images/save.png' />"></td>
</tr>
</table>
</form:form>
答案 0 :(得分:0)
@InitBinder
protected void initBinder(WebDataBinder binder)
{
binder.registerCustomEditor(List.class, "servicesList", new CustomCollectionEditor(List.class)
{
@Override
protected Object convertElement(Object element)
{
Integer id = null;
if(element instanceof String && !((String)element).equals("")){
try{
id = Integer.parseInt((String) element);
}
catch (NumberFormatException e) {
e.printStackTrace();
}
}
else if(element instanceof Integer) {
id = (Integer) element;
}
return id != null ? marketServiceService.getMarketServiceById(id) : null;
}
});
}