2014-02-20 2 views
3

Number 필드에 바인딩 된 xpage에 comboBox가 있습니다. 콤보가 관리 빈에이 같은 찾고 SelectItem 값을 채우는 데 사용되는 코드 :정수 값을 사용하는 comboBox

/* 
* 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이므로 해당 부분이 맞습니다.

콤보 상자는 숫자 변환기를 사용하여 정수 형식의 필드와 일치시킵니다.

문제는이 구성으로 유효성 검사가 실패한다는 것입니다.

이 사이트에는 비슷한 문제를 해결하는 또 다른 질문이 있지만, 저는 콩을 사용하기 때문에 다른 각도를 가지고 있습니다. 다른 질문에서 이것이 853에서 작동했지만 9에서 작동하지 않았다고 제안되었습니다. 이거 버그 야? 그리고 그 버그는 SPR을 가지고 있습니까?

제발 좀 도와주세요. 당신이 컨버터 integerOnly=true를 사용하는 경우

덕분에, 비켜

답변

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; 
} 
0

숫자 텍스트 상자에는 정수 값을 사용하지 않습니다. Object를 변수 유형으로 사용하여 NumberField를 Bean에 바인딩하고 getter & setter에 sysout (newValue.class)을 추가하여이를 확인할 수 있습니다.

Integer를 vartype으로 사용할 경우 값을 Number 필드로 설정할 때 내부 Invalid Argument 예외가 발생합니다. 두 배로하면 저장하고 유효성 검사를 통과해야합니다. 내가 콩을 (코드 추한)를 사용하여 얼마나

여기 :

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

내 콤보 상자 내 필드, 기압 InputText]를 그렇지는 콤보 상자와 사용자로부터 값을 얻을 것 읽기 전용입니다.

<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> 
관련 문제