多种形式:选择,休眠,弹簧

时间:2014-08-11 17:03:55

标签: java spring hibernate jsp

我有很多员工和服务。我创建了一项服务,当我选择创建一个员工时,选择了那些希望能够分配员工的员工。我的问题是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>

1 个答案:

答案 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;
            }
        });
    }