【发布时间】:2023-12-12 02:41:02
【问题描述】:
我试着去理解
omnifaces.converter.ListIndexConverter
@FacesConverter("omnifaces.ListIndexConverter")
public class ListIndexConverter implements Converter {
private static final String ERROR_LIST_INDEX_BOUNDS =
"Index {0} for value {1} in component {2} is out of bounds.";
private static final String ERROR_VALUE_NOT_IN_LIST =
"Object {0} in component {1} does not appear to be present in the given list.";
private List<?> list;
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
int index = Integer.valueOf(value);
if (index < 0 || index >= list.size()) {
throw new ConverterException(
createError(ERROR_LIST_INDEX_BOUNDS, index, value, component.getClientId(context))
);
}
return list.get(index);
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equals(value)) {
return i + "";
}
}
throw new ConverterException(
createError(ERROR_VALUE_NOT_IN_LIST, value == null ? "null" : value.toString(), component.getClientId(context))
);
}
public void setList(List<?> list) {
this.list = list;
}
}
我已经对其进行了调试,但无法弄清楚所有内容!
这是我的问题:
1) list 成员变量何时由谁填充?
2) 在文档中
http://omnifaces.org/docs/javadoc/2.0/org/omnifaces/converter/SelectItemsIndexConverter.html
提到以下几点:
这个转换器比 SelectItemsConverter 有以下缺点:
由于开发人员的错误,在回发期间可用的选择项发生不兼容更改的情况下,将不再出现“验证错误:值无效”。开发人员应绝对确保在回发时保留完全相同的列表(例如,通过使其成为视图范围或更广泛范围 bean 的属性)。
(SelectItemsConverter可以替换为ListConverter)
有人可以更详细地解释一下吗?
据我了解,它需要一个@RequestScoped Bean 和一个用于DataTable 的可编辑列表来引发这个?
出于教育原因,我想这样做,并将其展示给其他开发人员。
希望我的问题很清楚!非常感谢您的任何解释!
【问题讨论】: