JSFプロジェクトでは、文字列値のリストが入力され、整数値「yearStart」に接続されたSelectOneMenuがあります。リストから値を選択すると、コンバーターは常にコンソールに「stringVal=null」を出力します。選択したアイテムの値がコンバーターに到達しないのはなぜですか?
私のWebページには次のものが含まれています。
<h:selectOneMenu value="#{applicantController.yearStart}">
<f:selectItems value="#{yearList.years}" />
<f:converter converterId="studyYearConverter"/>
</h:selectOneMenu>
次の年のリストを使用します。
@ManagedBean
@ApplicationScoped
public class YearList implements Serializable {
private static final long serialVersionUID = 1L;
private final List<String> years = Arrays.asList("prior to 1990", "1990",
"1991", "1992", "1993", "1994", "1995", "1996", "1997", "1998",
"1999", "2000", "2001", "2002", "2003", "2004", "2005", "2006",
"2007", "2008", "2009", "2010", "2011", "2012", "2013");
public List<String> getYears() {
return years;
}
}
私のコンバータークラス:
@FacesConverter(value = "studyYearConverter")
public class StudyYearConverter implements Converter {
private static final String PRIOR_TO_1990 = "prior to 1990";
@Override
public Object getAsObject(FacesContext context, UIComponent component,
String stringVal) {
if (PRIOR_TO_1990.equals(stringVal)) {
return -1;
} else {
System.out.println("stringVal = " + stringVal);
// Why is this alway null??
try {
return Integer.parseInt(stringVal);
} catch (NumberFormatException pe) {
FacesMessage message = new FacesMessage(
"Invalid date format. Valid format e.g. 2010-04");
throw new ConverterException(message);
}
}
}
@Override
public String getAsString(FacesContext context, UIComponent component,
Object value) {
if (value == null || !(value instanceof Integer)) {
return null;
} else {
Integer year = (Integer) value;
if (year == -1) {
return PRIOR_TO_1990;
} else {
return year.toString();
}
}
}
}