gpt4 book ai didi

jsf - 与 PrimeFaces 转换器混淆(因为它适用于 selectOneMenu)

转载 作者:行者123 更新时间:2023-12-03 23:30:42 25 4
gpt4 key购买 nike

AutoComplete 演示中 PlayersConverter 的实现实际上不仅用作转换器,还用作玩家列表的加载器。我对这个模型有点厌倦,因为我的项目中已经实现了加载。
我不明白为什么 Converter 接口(interface)没有作为模板实现:

Converter<Players>

反而。

是的,这些演示看起来很棒,但是看到数据被静态加载到转换器内的列表中,我不知道如何在现实生活中的应用程序中使用它,转换器不应该与数据加载有任何关系。

是否可以在不实际加载数据的情况下使用 PrimeFaces 转换器?如何通知转换器它应该转换的列表项的类型?

最佳答案

我知道您说的是 PlayerConverterthis page所示.这只是纯粹出于演示目的而进行的极其本地化的实现(展示不使用任何数据库,他们必须在某处获取这些数据)。这确实令人困惑和误导。在现实世界的代码中,您应该与数据库中的数据进行交互,如下所示:

@ManagedBean
public class PlayerConverter implements Converter {

@EJB
private PlayerService service;

public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) {
if (submittedValue == null || submittedValue.isEmpty()) {
return null;
}

try {
return service.find(Integer.valueOf(submittedValue));
} catch (NumberFormatException exception) {
throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion Error", "Not a valid player ID"));
}
}

public String getAsString(FacesContext context, UIComponent component, Object modelValue) {
if (modelValue == null) {
return "";
}

if (modelValue instanceof Player) {
return String.valueOf(((Player) modelValue).getNumber());
} else {
throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion Error", "Not a valid player instance"));
}
}
}

从编辑前的原始问题:

Further, when they write in their demos converter="player" what does "player" refer to?



至于 converter="player" ,这只是 <converter-id> 的值注册于 faces-config.xml .您也可以通过 @FacesConverter 注册注解:
@FacesConverter("player") // I'd rather rename it to playerConverter.
public class PlayerConverter implements Converter {
// ...
}

请注意,我的示例使用 @ManagedBean相反,否则使用 @EJB本来是不可能的。另见 How to inject @EJB, @PersistenceContext, @Inject, @Autowired, etc in @FacesConverter?

无关 对于具体问题,我知道整个转换器似乎是某种不必要的代码重复。 JSF 实用程序库 OmniFaces 以 omnifaces.ListConverter 的形式识别并解决了这个问题。 .只需使用 converter="omnifaces.ListConverter"而不是 converter="player"和整个转换器类。请注意,使用 <f:selectItem(s)> 的组件有一个类似的转换器。 , omnifaces.SelectItemsConverter .

关于jsf - 与 PrimeFaces 转换器混淆(因为它适用于 selectOneMenu),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18818517/

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