Конвертер JSF для selectOneMenu
Я хочу установить отношение "много-к-одному" в объекте спящего режима, используя selectOneMenu
.
<h:selectOneMenu value="#{taskBean.instance.currency}" class="form-control" id="currencyList" converter="#{currencyConverterBean}">
<f:selectItems value="#{currencyBean.currencyList}" var="currency" itemLabel="#{currency.name}"/>
</h:selectOneMenu>
где #{taskBean.instance}
возвращает объект спящего режима Задача:
@Entity
@Table(name="task")
public class Task {
//...
public Currency currency;
@ManyToOne
@JoinColumn(name = "currencyID")
public Currency getCurrency() {
return currency;
}
//...
}
Если задано значение #{taskBean.instance.currency.id}
для selectOneMenu и #{currency.id}"
для itemValue, это не работает. Поэтому я попытался использовать конвертер:
@ManagedBean(name="currencyConverterBean")
@FacesConverter(value = "currencyConverter")
@RequestScoped
public class CurrencyConverter implements Converter {
CurrencyBO currencyBO;
@Override
public Currency getAsObject(FacesContext ctx, UIComponent component, String value) {
return getCurrencyBO().getCurrencyById(new Integer(value));
}
@Override
public String getAsString(FacesContext fc, UIComponent uic, Object o) {
return String.valueOf(((Currency) o).getId());
}
public CurrencyBO getCurrencyBO() {
return currencyBO;
}
public void setCurrencyBO(CurrencyBO currencyBO) {
this.currencyBO = currencyBO;
}
}
Это не работает. Он возвращает следующую ошибку:
PWC1406: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NullPointerException at com.otv.converter.CurrencyConverter.getAsObject(CurrencyConverter.java:33)
Что я делаю неправильно?