Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带整数值的组合框_Java_Xpages - Fatal编程技术网

Java 带整数值的组合框

Java 带整数值的组合框,java,xpages,Java,Xpages,我在xpage上有一个绑定到数字字段的组合框。用于填充组合的SelectItem值的代码位于托管bean中,如下所示: /* * Returns last year, current year and next year as List<SelectItem> * For use with comboBox selection values */ public List<SelectItem> getYearSelectItems() { int thisY

我在xpage上有一个绑定到数字字段的组合框。用于填充组合的SelectItem值的代码位于托管bean中,如下所示:

/*
 * 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;
}
如您所见,我正在将SelectItem值的类名打印到控制台以进行调试。控制台中列出的类名是java.lang.Integer,因此该部分绝对正确

组合框使用数字转换器匹配表单中的字段,仅限整数

问题是,使用此配置验证失败

我知道这个网站上还有另外一个问题可以解决类似的问题,但我的问题角度不同,因为我使用的是bean。 在另一个问题中,有人认为这在853年有效,但在9年无效。若有,;这是虫子吗?这只虫子有SPR吗

请帮我把这件事弄清楚


谢谢,如果在转换器中使用integerOnly=true,则Ove

数字文本框也不使用整数值。 您可以通过使用对象作为变量类型将这样一个NumberField绑定到Bean并将sysoutnewValue.class添加到getter&setter来验证这一点

如果将Integer用作vartype,则在将值设置为Numberfield时会出现内部无效参数异常。使用double时,您应该保存并通过验证

在这里,我将如何使用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;
}   
我的组合框和我的字段,输入文本是只读的,否则它将从组合框和用户获得一个值

    <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>
出于某种奇怪的原因,它误解了SelectItem。换成双人解决了我的问题

代码:

/*
 * 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;
}