gpt4 book ai didi

jsf-2 - 在 FacesConverter 中使用 ManagedBean

转载 作者:行者123 更新时间:2023-12-04 22:14:00 25 4
gpt4 key购买 nike

我想使用 ManagedBean在我的Converter . ManagedBean负责从数据库中获取数据。在 Converter我想将字符串转换为必须从数据库中获取的对象。

这是我的转换器

@FacesConverter(forClass=Gallery.class, value="galleryConverter")
public class GalleryConverter implements Converter {

// of course this one is null
@ManagedProperty(value="#{galleryContainer}")
private GalleryContainer galleryContainer;

@Override
public Object getAsObject(FacesContext context, UIComponent component, String galleryId) {
return galleryContainer.findGallery(galleryId);
...
}

@Override
public String getAsString(FacesContext context, UIComponent component, Object gallery) {
...
}

}

我知道 galleryContainer将为空,如果我想注入(inject) ManagedBean进入 Converter我可以将其标记为 ManagedBean也。问题是我想以漂亮的方式来做,我不想寻找一些“奇怪的解决方案”。也许问题出在我的应用程序中?也许还有其他一些好的解决方案来创建必须从数据库获取数据并在转换器中使用的对象?我还想提一下,我更喜欢使用 DependencyInjection而不是使用 new 创建新对象语句(更容易测试和维护)。有什么建议么?

最佳答案

而不是使用 @FacesConverter你应该使用 @ManagedBean ,因为当前面临的转换器不是有效的注入(inject)目标。尽管如此,您可以选择您的转换器作为托管 bean,因此在您的 View 中将其称为 converter="#{yourConverter}" (按托管 bean 名称)而不是 converter="yourConverter" (通过转换器 ID)。

基本用法示例:

@ManagedBean
@RequestScoped
public class YourConverter implements Converter {

@ManagedProperty...
...

//implementation of converter methods

}

当然,阅读 BalusC 的无价之宝 Communication in JSF 2.0也会对这个问题有所了解。

还值得一提的是,转换器 bean 的范围可能会更改为,例如,应用程序或 session ,如果它不应该保持任何状态。

关于jsf-2 - 在 FacesConverter 中使用 ManagedBean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15392887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com