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