- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试将 Richfaces 4 展示中的一些代码转换为使用 CDI 而不是 JSF 注释。
我知道我可以使用 @Named
来替换 @MangedBean
和 @Inject
来替换 @ManagedProperty
.但是我遇到了一些麻烦。我正在尝试专门转换 RichFaces Tree 示例。
我做了以下更改,我知道这是不正确的,所以请不要使用它:
//@ManagedBean
//@ViewScoped
@Named
@SessionScoped
public class TreeBean implements Serializable {
private static final long serialVersionUID = 1L;
// @ManagedProperty(value = "#{cdsParser.cdsList}")
// private List<CDXmlDescriptor> cdXmlDescriptors;
@Inject
private Instance<CDXmlDescriptor> cdXmlDescriptors;
// I also Tried :
// @Inject
// private CDParser cdsParser;
// private List<CDXmlDescriptor> cdXmlDescriptors = cdsParser.getCdsList();
........
然后我添加了(我不确定是否需要):
@Named
@SessionScoped
public class CDXmlDescriptor implements Serializable { ...
并改变了:
//@ManagedBean(name = "cdsParser")
@Named("CDParser")
//@Named
@SessionScoped
public class CDParser implements Serializable{
/**
*
*/
private static final long serialVersionUID = 3890828719623315368L;
@Named
private List<CDXmlDescriptor> cdsList;
我想不出使用 CDI 替换 @ManagedProperty(value = "#{cdsParser.cdsList}")
的正确方法?
最佳答案
在 JSF 2.3+ 上你可以使用 javax.faces.annotation.ManagedProperty
为了这。它的工作方式与旧版本相同,因为 JSF 2.3 已弃用 javax.faces.bean.ManagedProperty
,你只需要添加@Inject
即可。
例子:
import javax.faces.annotation.ManagedProperty;
...
@Inject
@ManagedProperty(value = "#{cdsParser.cdsList}")
private List<CDXmlDescriptor> cdXmlDescriptors;
如果您还没有使用 JSF 2.3+,那么您需要一个 producer field或 producer method使其可注入(inject)。
生产者字段示例:
import javax.enterprise.inject.Produces;
...
@Named
@Produces
private List<CDXmlDescriptor> cdsList;
生产者方法示例:
import javax.enterprise.inject.Produces;
private List <CDXmlDescriptor> cdsList;
...
@Named("cdsList")
@Produces
public List<CDXmlDescriptor> getCdsList {
return cdsList;
};
如果没有其他生产者字段或生产者方法返回相同的 bean 类型,则此方法有效。否则你需要为你的生产者字段引入一个特殊的限定符来解决歧义:
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import javax.inject.Qualifier;
@Qualifier
@Retention(RUNTIME)
@Target({METHOD, FIELD, PARAMETER, TYPE})
public @interface CdsList {
}
与
@Named @Produces @CdsList
private List<CDXmlDescriptor> cdsList;
关于jsf - @ManagedProperty 的 CDI 替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9934458/
我想让数据库对象仅在需要时才创建,所以我想做这样的事情 public class Data { public List getGroups(){ List MyList=new ArrayLi
如何使用@ManagedProperty在支持组件中? 这是合作伙伴选择器复合组件。该组件检查数据库中输入的合作伙伴代码,如果代码有效,则填写合作伙伴名称。 组件:
@ManagedProperty("#{sessionBean}") 未正确注入(inject)。 sessionBean 在 JAR 文件中声明,它也有一个 JSF 2.0 兼容的 faces-co
我正在尝试在多个 SessionScoped bean 之间共享一个对象。虽然我收到了错误,但我真的不知道为什么。 @ManagedProperty(value="#{tb}") private te
我问的问题可能是一个非常简单的问题。我想在登录成功后显示用户详细信息。 我的登录 Controller public LoginController() { } public String get
我正在使用 Spring 和 JSF 2 创建一个 Web 应用程序。 业务对象保存在 Spring 容器中,我使用 @ManagedProperty 将它们注入(inject)托管 Bean,如下所
我正在尝试通过以下方式在我的 FacesConverted 中注入(inject)一个 ManagedBean: @ManagedBean @RequestScoped @FacesConverter
这个问题在这里已经有了答案: Backing beans (@ManagedBean) or CDI Beans (@Named)? (5 个回答) 6年前关闭。 好的,所以我有一个需要引用另一个 (
我正在尝试将 Richfaces 4 展示中的一些代码转换为使用 CDI 而不是 JSF 注释。 我知道我可以使用 @Named 来替换 @MangedBean 和 @Inject 来替换 @Mana
我有两个 jsf Controller ,分别是 ControllerA 和 ControllerB。两者都在 session 范围内。我想从 ControllerA 调用 ControllerB 中
我有一个我正在构建的 JSF 验证器,其中包含我想从 ResourceBundle 加载的属性。但是,我不太确定如何工作,因为它没有正确加载。关于如何完成这项工作的任何想法? 我试过使用 @PostC
我试图将一个 session 范围的 bean 的值注入(inject)一个 View 范围的 bean,但它一直返回 null,这是一个片段: import javax.faces.applicat
我有一个 CDI 托管 bean,我想将请求参数设置为托管属性: import javax.inject.Named; import javax.enterprise.context.RequestS
我需要在同一个 bean 上设置 2 个不同的 ManagedProperty。所以我试过: @ManagedBean(name="selector") @RequestScoped public c
我试图通过 @ManagedProperty 注释将整个 JSF 托管 bean 注入(inject)另一个托管 bean(非常类似于 Possible to inject @ManagedBean
我是 JSF 的新手,我想知道是否可以根据不同的情况将基类的不同子类作为 MangedProperty 注入(inject)?例如,我有这个托管 bean: @ManagedBean @Session
我的 bean 有这个: @ManagedBean @ViewScoped public class BookBean implements Serializable { @Man
首先我想说我是 JSF 的新手。 我想创建简单的复合组件,可用于编辑文章。它应该以这种方式工作: 复合组件看起来像这样 ArticleBean负责复合组件的数据处理(这里是save方法) 每个想要使
像这样定义 View 参数有什么区别: 并在 ManagedBean 中定义属性,如下所示: @Inject @ManagedProperty(value = "#{param.id}")
我尝试学习 JSF 并遇到与 ManagedProperty 相关的问题。但是我尝试使用它,它总是失败 - 异常指针为空。我做错了什么? 我在stackoverflow上阅读了一些“类似的帖子”,但它
我是一名优秀的程序员,十分优秀!