“空轉(zhuǎn)換器”的轉(zhuǎn)換錯(cuò)誤設(shè)置值-為什么我需要JSF中的轉(zhuǎn)換器?我在理解如何在JSF 2中有效地使用POJO/Entity時(shí)遇到了問(wèn)題。例如,我試圖選擇一個(gè)Warehouse實(shí)體通過(guò)以下下拉列表:<h:selectOneMenu value="#{bean.selectedWarehouse}">
<f:selectItem itemLabel="Choose one .." itemValue="#{null}" />
<f:selectItems value="#{bean.availableWarehouses}" /></h:selectOneMenu>以及下面的托管bean:@Named@ViewScopedpublic class Bean {
private Warehouse selectedWarehouse;
private List<SelectItem> availableWarehouses;
// ...
@PostConstruct
public void init() {
// ...
availableWarehouses = new ArrayList<>();
for (Warehouse warehouse : warehouseService.listAll()) {
availableWarehouses.add(new SelectItem(warehouse, warehouse.getName()));
}
}
// ...}注意我用了整個(gè)Warehouse的價(jià)值SelectItem.當(dāng)我提交表單時(shí),以下Faces消息失敗:轉(zhuǎn)換錯(cuò)誤設(shè)置值‘com.example.Warehouse@caebabe’空轉(zhuǎn)換器‘。我希望JSF能設(shè)置正確的Warehouse對(duì)象打包到托管bean中。SelectItem..將我的實(shí)體包裝在SelectItem應(yīng)該跳過(guò)創(chuàng)建Converter為了我的實(shí)體。我真的需要用Converter每當(dāng)我想使用<h:selectOneMenu>?對(duì)于JSF來(lái)說(shuō),只需從可用項(xiàng)列表中提取所選的項(xiàng)就可以了。如果我真的要用轉(zhuǎn)換器,實(shí)際的方法是什么?到目前為止,我想到的是:創(chuàng)建一個(gè)Converter實(shí)體的實(shí)施。覆蓋getAsString()..我想我不需要這個(gè),因?yàn)镾electItem將用于顯示下拉選項(xiàng)標(biāo)簽。覆蓋getAsObject()..我認(rèn)為這將用于返回正確的SelectItem或?qū)嶓w,取決于在托管bean中定義的選定字段的類型。這個(gè)getAsObject()把我弄糊涂了。做這件事的有效方法是什么?具有字符串值時(shí),如何獲得關(guān)聯(lián)的實(shí)體對(duì)象?應(yīng)該根據(jù)字符串值從服務(wù)對(duì)象查詢實(shí)體對(duì)象并返回該實(shí)體嗎?或者也許我可以訪問(wèn)組成選擇項(xiàng)的實(shí)體的列表,循環(huán)它們以找到正確的實(shí)體,并返回該實(shí)體?這樣做的正常方式是什么?
“空轉(zhuǎn)換器”的轉(zhuǎn)換錯(cuò)誤設(shè)置值-為什么我需要JSF中的轉(zhuǎn)換器?
慕碼人8056858
2019-06-09 15:30:23