2011-04-18 70 views
4

我有一個JSF支持bean設計問題。現在,我的支持bean持有UI顯示信息以及商業模式數據。人們建議模型和觀點應該分開。那麼創建不同的bean來持有UI顯示數據並且讓後臺bean有引用它是不錯的主意?JSF MVC設計問題

回答

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. 
} 

<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> 

這是更好的

@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. 
} 

<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> 

見還有this JSF 2.0 tutorial提供的例子。

+0

哇這很快很清楚,非常感謝你的回答 – 2011-04-18 17:05:25