Java 带整数值的组合框
我在xpage上有一个绑定到数字字段的组合框。用于填充组合的SelectItem值的代码位于托管bean中,如下所示: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
/*
* 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;
}