Tsu*_*sai 4 jsf design-patterns
我有一个JSF支持bean设计问题.现在,我的支持bean持有UI显示信息和业务模态数据.人们建议模型和视图应该分开.那么创建不同的bean持有UI显示数据并且有支持bean的参考它是否是个好主意?
所以创建不同的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教程中提供的示例.