【问题标题】:How to use spring DAO methods with Managedbean object? [duplicate]如何将 Spring DAO 方法与 Managedbean 对象一起使用? [复制]
【发布时间】:2018-11-08 14:32:26
【问题描述】:

我有这个 ManagedBean:

@ManagedBean(name="studentItem")
@ViewScoped 
public class StudentBean implements Serializable {

    private static final long serialVersionUID = 1L;

    @ManagedProperty("#{StudentService}")
    private StudentService studentService;

    private int regId;
    private String firstName;
    private String lastName;

    //getters and setters


    public void saveStudent(StudentBean student) {
        //calling from xhtml to save form data

        studentService.addStudent(student);
    }
}

还有这个服务实现:

@Component
@Service("StudentService")
public class StudentServiceImpl implements StudentService {
    @Autowired
    private UserDao<Student> studentDao;
    @Override
    @Transactional
    public void addStudent(StudentBean student) {
         Student stu=new Student();
         stu.setRegId(student.getRegId());
         stu.setFirstName(student.getFirstName());
         stu.setLastName(student.getLastName());
         studentDao.addItem(stu);
    }
}

如您所见,我必须使用 DAO 方法将我的 StudentBean managed-bean 对象转换为 Student 对象类型以将其保存在数据库中。除了丑陋的一一复制属性,还有什么标准的方法吗?

【问题讨论】:

标签: spring jsf managed-bean


【解决方案1】:

您违反了 MVC(模型视图控制器)模式! 您有 3 个部分(Model=Student、View(您的 facelet)和 Controller=StudentBean)应该是独立的。

如果我是你,我会这样继续:

@ManagedBean(name="studentItem")
@ViewScoped 
public class StudentBean implements Serializable {
  private Student currentStudent;
  //getter/setter 

  @ManagedProperty("#{StudentService}")
  private StudentService studentService;      

  public String renderStudentForm(){
    //create a new student when you load the form
    currentStudent = new Student();
  }

  public void saveStudent(){
    studentService.addStudent(currentStudent);
  }
}

在您的表单视图中,您可以使用 EL #{studentItem.currentStudent.name} 调用学生属性

你明白了。

【讨论】:

    【解决方案2】:

    有一些实用程序可以在这种情况下为您提供帮助。 你可以试试 BeanUtils 复制属性或者 DozerMapper

    【讨论】:

    • 这将是维护糟糕设计的一种方式。最好按照重复项和答案的建议进行操作
    猜你喜欢
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 2014-09-05
    • 2017-06-07
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多