将@Model`javax.enterprise.inject.Model`用于JSF支持bean?
using @Model `javax.enterprise.inject.Model` for JSF backing bean?
我正在尝试使用 CDI bean 实现 JSF 支持 bean,正如 @ManagedBean 的贬值和它的范围注释所建议的那样,但我正在努力使用正确的示例,我正在尝试实现视图支持 bean使用 @Model (javax.enterprise.inject.Model) 这是 @Named @RequestScoped.
我找到了这个 question 但它使用的是 ViewScope bean,我将如何使用 RequestScoped(最好是 @Model)实现相同的功能,@Model 的最佳实践通常是什么?
编辑 1:
我尝试在 EditProduct PostConstruct 中创建一个新产品:
@Model
public class EditProduct {
private Product product; // +getter +setter
@Inject
private ProductService productService;
@PostConstruct
public void init(){
product = new Product();
}
public String save() {
productService.save(product);
return "/products?faces-redirect=true";
}
// ...
}
然后通过
设置产品
<f:viewParameter name="product-id" target="#{editProduct.product}"
converter="#{productConverter}" />
它正在运行,但我正在寻找最佳实践。
您应该还可以添加 @Named
注释,它将显示为 editProduct
。
https://memorynotfound.com/cdi-managed-bean-example-with-named/
编辑:见评论
请求作用域的支持 bean 旨在使应用程序内存占用尽可能低,因此使用它们来支持带有 @Model
注释的视图很有意义,缺点是必须达到每个处理数据的请求的持久性数据存储,因此 @Model bean 的最佳用例是:
基本上每一件事。
像这样的东西:
- JSF 页面的事件处理
- 延迟加载数据
- 验证和转换以及其他代码执行
- 等等....是的,其他的都
这些事情在请求范围的 bean 中很容易完成,但是其他 bean 的作用是什么?
简单来说,我们可以假设:
@ViewScoped
以支持数据繁重的页面,其中用户通过多次交互编辑数据,每次交互都是一个请求,但每次访问数据库的成本都很高。
@SessionScoped
用于用户的会话数据、身份验证、凭据和配置。
@ApplicationScoped
CDI 的 state-full 单例。
...每个其他范围都有其用途,但对于一个好的 Web 应用程序,@Model
应该是默认值,其他范围有特定的用例。
我正在尝试使用 CDI bean 实现 JSF 支持 bean,正如 @ManagedBean 的贬值和它的范围注释所建议的那样,但我正在努力使用正确的示例,我正在尝试实现视图支持 bean使用 @Model (javax.enterprise.inject.Model) 这是 @Named @RequestScoped.
我找到了这个 question 但它使用的是 ViewScope bean,我将如何使用 RequestScoped(最好是 @Model)实现相同的功能,@Model 的最佳实践通常是什么?
编辑 1: 我尝试在 EditProduct PostConstruct 中创建一个新产品:
@Model
public class EditProduct {
private Product product; // +getter +setter
@Inject
private ProductService productService;
@PostConstruct
public void init(){
product = new Product();
}
public String save() {
productService.save(product);
return "/products?faces-redirect=true";
}
// ...
}
然后通过
设置产品<f:viewParameter name="product-id" target="#{editProduct.product}"
converter="#{productConverter}" />
它正在运行,但我正在寻找最佳实践。
您应该还可以添加 @Named
注释,它将显示为 editProduct
。
https://memorynotfound.com/cdi-managed-bean-example-with-named/
编辑:见评论
请求作用域的支持 bean 旨在使应用程序内存占用尽可能低,因此使用它们来支持带有 @Model
注释的视图很有意义,缺点是必须达到每个处理数据的请求的持久性数据存储,因此 @Model bean 的最佳用例是:
基本上每一件事。 像这样的东西:
- JSF 页面的事件处理
- 延迟加载数据
- 验证和转换以及其他代码执行
- 等等....是的,其他的都
这些事情在请求范围的 bean 中很容易完成,但是其他 bean 的作用是什么?
简单来说,我们可以假设:
@ViewScoped
以支持数据繁重的页面,其中用户通过多次交互编辑数据,每次交互都是一个请求,但每次访问数据库的成本都很高。@SessionScoped
用于用户的会话数据、身份验证、凭据和配置。@ApplicationScoped
CDI 的 state-full 单例。
...每个其他范围都有其用途,但对于一个好的 Web 应用程序,@Model
应该是默认值,其他范围有特定的用例。