p:selectOneRadio转换器导致堆栈堆内存问题

时间:2013-05-08 17:15:54

标签: jsf primefaces converter selectoneradio

真奇怪......

我有一个转换器,当我使用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;
    }
}

此致

1 个答案:

答案 0 :(得分:0)

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

  

@RoToString(excludeFields = {“adminRegion”})