JSF编码技术:直接在表单后面使用字段或对象的优点?

时间:2016-07-15 13:11:51

标签: jsf

假设我有以下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?

0 个答案:

没有答案