gpt4 book ai didi

jsf - 如何为编写自定义转换器

转载 作者:行者123 更新时间:2023-12-03 11:44:47 24 4
gpt4 key购买 nike

当使用使用POJO列表的PrimeFaces组件时,如何编写自定义转换器?我的特殊问题是<p:pickList>

<p:pickList converter="????" value="#{bean.projects}" var="project" 
itemLabel="#{project.name}" itemValue="#{project}">

没有转换器,我会得到 java.lang.ClassCastException,因为JSF会使用未转换的 java.lang.String提交值来设置提交的值。

最佳答案

有可能,没有其他数据库访问权限,但是我不知道最好的方法。我使用一个非常特定的转换器,仅适用于选择列表。尝试这个:

@FacesConverter(value = "primeFacesPickListConverter")public class PrimeFacesPickListConverter implements Converter {
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
Object ret = null;
if (arg1 instanceof PickList) {
Object dualList = ((PickList) arg1).getValue();
DualListModel dl = (DualListModel) dualList;
for (Object o : dl.getSource()) {
String id = "" + ((Project) o).getId();
if (arg2.equals(id)) {
ret = o;
break;
}
}
if (ret == null)
for (Object o : dl.getTarget()) {
String id = "" + ((Project) o).getId();
if (arg2.equals(id)) {
ret = o;
break;
}
}
}
return ret;
}

@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
String str = "";
if (arg2 instanceof Project) {
str = "" + ((Project) arg2).getId();
}
return str;
}

和选择列表:
<p:pickList converter="primeFacesPickListConverter" value="#{bean.projects}" var="project" 
itemLabel="#{project.name}" itemValue="#{project}">

工作对我来说是必要的。

关于jsf - 如何为<p:pickList>编写自定义转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3621251/

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