ComboBox with integer values

I have a comboBox on the xpage associated with the Number field. The code used to populate the SelectItem values ​​for the combo is in a managed bean that looks like this:

/*
 * Returns last year, current year and next year as List<SelectItem>
 * For use with comboBox selection values
 */
public List<SelectItem> getYearSelectItems() {
    int thisYear = Calendar.getInstance().get(Calendar.YEAR);
    List<SelectItem> selectItems = new ArrayList<SelectItem>();
    selectItems.add(new SelectItem(new Integer(thisYear - 1), new Integer(thisYear - 1).toString()));
    selectItems.add(new SelectItem(new Integer(thisYear), new Integer(thisYear).toString()));
    selectItems.add(new SelectItem(new Integer(thisYear + 1), new Integer(thisYear + 1).toString()));

    for(int i = 1; i < selectItems.size(); i ++) {
        System.out.println(new Integer(i).toString() + ": " + selectItems.get(i).getValue().getClass());
    }
    return selectItems;
}

As you can see, I am printing class names for SelectItem values ​​for the console for debugging. The class name specified in the console is java.lang.Integer, so the part is definitely correct.

Combobox uses a numerical converter to match a field in a form, only an integer.

The problem is that validation fails with this configuration.

, , , , bean. , 853 , 9. ; ? SPR?

, .

, Ove

+3
2

, <xp:convertNumber> SelectItem(<Integer>, <String>) - . Double .

:

/*
 * Returns last year, current year and next year as List<SelectItem>
 * For use with comboBox selection values
 */
public List<SelectItem> getYears() {
    int thisYear = Calendar.getInstance().get(Calendar.YEAR);
    List<SelectItem> years = new ArrayList<SelectItem>();
        years.add((new SelectItem(new Double(thisYear - 1), new Integer(thisYear - 1).toString())));
        years.add(new SelectItem(new Double(thisYear), new Integer(thisYear).toString()));
        years.add(new SelectItem(new Double(thisYear + 1), new Integer(thisYear + 1).toString()));

    }
    return years;
}
+2

Number Number Integer, integerOnly=true . , NumberField Bean Object as variable sysout (newValue.class) getter & setter.

Integer vartype, Invalid Argument Numberfield. .

Bean ( ):

private static Map<String,Integer> years;
private double selectedYear = 2013;

static {
    Integer thisYear = Calendar.getInstance().get(Calendar.YEAR);       
    years = new LinkedHashMap<String, Integer>();
    years.put(new Integer(thisYear - 1).toString(),new Integer(thisYear - 1));
    years.put((thisYear).toString(),new Integer(thisYear));
    years.put(new Integer(thisYear + 1).toString(),new Integer(thisYear + 1));  
}

public void yearChanged(ValueChangeEvent e){
    System.out.println("event Start " + selectedYear);
    selectedYear = years.get(e.getNewValue());//Set new Value to field
    System.out.println("event End " + selectedYear);
}
public Object[] getYearInMap() {//select Items
    return this.years.keySet().toArray();
}

      //Binding for the NumberField
public void setSelectedYear(double selectedYear) {
    this.selectedYear = selectedYear;
}
public double getSelectedYear() {
    return selectedYear;
}   

My Combobox , atm inputText readonly, Combobox .

    <xp:comboBox
        loaded="true"
        id="comboBox2"
        valueChangeListener="#{XPageBean.yearChanged}"
        defaultValue="#{XPageBean.selectedYear}">
        <xp:selectItems>
            <xp:this.value><![CDATA[#{javascript:XPageBean.getYearInMap();}]]></xp:this.value>
        </xp:selectItems>
        <xp:eventHandler
            event="onclick"
            submit="true"
            refreshMode="partial"
            refreshId="refresh">
            <xp:this.action><![CDATA[#{javascript://}]]></xp:this.action>
        </xp:eventHandler>
    </xp:comboBox>

<xp:panel id="refresh">
    <xp:inputText
        id="txt_out3"
        value="#{XPageBean.selectedYear}"
        defaultValue=""
        readonly="true">
        <xp:this.converter>
            <xp:convertNumber
                type="number"
                integerOnly="true">
            </xp:convertNumber>
        </xp:this.converter>
    </xp:inputText>
    <xp:text id="txt_out2"
        value="#{XPageBean.selectedYear}">
        <xp:this.converter>
            <xp:convertNumber
                type="number"
                integerOnly="true">
            </xp:convertNumber>
        </xp:this.converter>
    </xp:text>
</xp:panel>
0

All Articles