0

真的很奇怪...

我有一个转换器,当我使用 ap:SelectOneMenu 时可以工作,但是当我切换到 ap: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;
    }
}

问候

一世

4

1 回答 1

0

最后它是一个递归的@RooToString 方法被调用。我必须检查数据模型关系并向@RooToString 添加注释以避免在几个实体中出现循环

@RooToString(excludeFields = { "adminRegion" })

于 2013-05-16T15:36:28.983 回答