假设我有以下User
类的对象:
public class User {
private String name;
// Getters and setters
}
相应的JSF表单可能看起来像A)
<h:form>
<h:outputLabel for="userName" />
<h:inputText id="userName" value="#{userController.user.name}"/>
<h:commandButton value="submit" action="#{userController.saveUserObject}" />
</h:form>
或作为B)
<h:form>
<h:outputLabel for="userName" />
<h:inputText id="userName" value="#{userController.name}"/>
<h:commandButton value="submit" action="#{userController.saveUser}" />
</h:form>
相应的UserController
类可能如下所示:
@ViewScoped
public class UserController implements Serializable {
// User object
private User user;
// User name field
private String name;
@PostConstruct
public void postConstruct() {
this.user = new User();
}
public void saveUser() {
User user = new User();
user.setName(name);
// Save user to database
}
public void saveUserObject() {
// Save user to database
// User object is already created and contains the given "name" value via POST
}
}
本质区别在于A)直接与User
对象一起使用,而B)需要手动构造User
对象并相应地设置字段。
对我来说,一个很大的优势是A)直接封装了User
对象,并且您不需要将表单值转换为User
对象。这似乎可以保存代码并且看起来更像面向对象。
使用A)还有其他优势吗?B)你可能想出来吗?它是如何在现实代码中完成的,特别是在使用更新的JSF版本时,例如2.2?