JSF MVC设计问题

Tsu*_*sai 4 jsf design-patterns

我有一个JSF支持bean设计问题.现在,我的支持bean持有UI显示信息和业务模态数据.人们建议模型和视图应该分开.那么创建不同的bean持有UI显示数据并且有支持bean的参考它是否是个好主意?

Bal*_*usC 8

所以创建不同的bean持有UI显示数据并有支持参考它是个好主意吗?

是的,否则你继续将数据从模型映射到自己查看,同时你也可以让JSF/EL这样做.它确实不一定需要成为JSF @ManagedBean.

例如这很差:

@ManagedBean
@RequestScoped
public class ProductEditor {

    private String productName;
    private String productDescription;
    private BigDecimal productPrice;

    public String add() {
        Product product = new Product();
        product.setName(productName);
        product.setDescription(productDescription);
        product.setPrice(productPrice);
        productService.save(product);
        return "view";
    }

    // In total 6 getters and setters.
}
Run Code Online (Sandbox Code Playgroud)

<h:form>
    <h:inputText value="#{productEditor.productName}" />
    <h:inputTextarea value="#{productEditor.productDescription}" />
    <h:inputText value="#{productEditor.productPrice}">
        <f:convertNumber type="currency" currencySymbol="$" />
    </h:inputText>
    <h:commandButton value="Add" action="#{productEditor.add}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)

这个更好

@ManagedBean
@RequestScoped
public class ProductEditor {

    private Product product;

    @PostConstruct
    public void init() {
        product = new Product(); // You could also preload from DB based on some ID as request parameter.
    }

    public String add() {
        productService.save(product);
        return "view";
    }

    // Only 1 getter.
}
Run Code Online (Sandbox Code Playgroud)

<h:form>
    <h:inputText value="#{productEditor.product.name}" />
    <h:inputTextarea value="#{productEditor.product.description}" />
    <h:inputText value="#{productEditor.product.price}">
        <f:convertNumber type="currency" currencySymbol="$" />
    </h:inputText>
    <h:commandButton value="Add" action="#{productEditor.add}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)

另请参阅此JSF 2.0教程中提供的示例.