【发布时间】:2013-05-08 17:15:54
【问题描述】:
真的很奇怪……
我有一个转换器,当我使用 p:SelectOneMenu 时它可以工作,但是当我切换到 p:SelectOneRadio 时,我遇到了一个严重的崩溃,并出现 java 堆空间错误。堆栈跟踪似乎没有用,只是一个 java.lang.OutOfMemeoryError。
这行得通:
<p:selectOneMenu id="regions" value="#{aDMSBean.selectedRegion}">
<f:selectItem itemLabel="Global" itemValue="#{null}" />
<f:selectItems value="#{aDMSBean.adminRegions}" var="adminRegion" itemLabel="# {adminRegion.regionName}" itemValue="#{adminRegion}" />
<f:converter id="adminRegionConverter" converterId="regionConverter" />
<p:ajax listener="#{aDMSBean.regionSelect}" update="unassignedTasks"></p:ajax>
</p:selectOneMenu>
这会崩溃并烧毁:
<p:selectOneRadio id="regions" value="#{aDMSBean.selectedRegion}">
<f:selectItem itemLabel="Global" itemValue="#{null}" />
<f:selectItems value="#{aDMSBean.adminRegions}" var="adminRegion" itemLabel="# {adminRegion.regionName}" itemValue="#{adminRegion}" />
<f:converter id="adminRegionConverter" converterId="regionConverter" />
<p:ajax listener="#{aDMSBean.regionSelect}" update="unassignedTasks"></p:ajax>
</p:selectOneRadio>
我只能假设转换器没问题,因为它适用于 selectOneMenu。
@FacesConverter("regionConverter")
public class RegionConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
Region region = null;
if (value != null && value.length() > 0) {
region = Region.findRegion(new Long(value));
}
return region;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
String val = "";
if (value != null && value instanceof Region) {
val = ((Region) value).getId().toString();
}
return val;
}
}
问候
我
【问题讨论】:
-
嗨,最后它是一个递归的 RooToString 方法被调用。我必须检查数据模型关系并向 RooToString 添加注释以避免在几个实体中出现循环 RooToString(excludeFields = { "adminRegion" })
标签: jsf primefaces converter selectoneradio