从选择一个菜单中选择定制对象JSF Converter Exception
我想从一个菜单中选择自定义对象.它既不显示错误,也不显示值.该怎么办?请帮我.提前致谢.
i want to pick custom object from select one menu. it neither shows an error nor values. what to do? please help me. thanks in advance.
现在我在此行的getAsObject上看到Null指针异常:
Now i'm seeing Null pointer exception at getAsObject at this line:
return getCurrencyService().getCurrencyBtId(currencyId);
这是我的xhtml文档
<h:panelGrid columns="2">
<p:outputLabel value="" />
<p:selectOneMenu id="CurrencyMenu" value="#{CurrencyMB.currency}" converter="currencyConverter" >
<f:selectItems value="#{CurrencyMB.currencyList}" var="currency" itemValue="#{currency}" itemLabel="#{currency.currencyName}" >
</f:selectItems>
<p:ajax update="currencyOut" />
</p:selectOneMenu>
<p:outputLabel value="Currency Id : #{CurrencyMB.currency.currencyId}" id="currencyOut" />
</h:panelGrid>
这是我的ManagedBean类.
@ManagedBean(name = "CurrencyMB")
@RequestScoped
public class CurrencyManagedBean implements Serializable{
private Currency currency;
private List<Currency> currencyList;
public Currency getCurrency() {
return currency;
}
public void setCurrency(Currency currency) {
this.currency = currency;
}
public List<Currency> getCurrencyList() {
currencyList = new ArrayList<Currency>();
currencyList.addAll(getiCurrencyService().getCurrencies());
return currencyList;
}
public void setCurrencyList(List<Currency> currencyList) {
this.currencyList = currencyList;
}
}
这是我的currencyConverter类代码:
**@FacesConverter("currencyConverter")
public class CurrencyConverter implements Converter {
@ManagedProperty(value = "#{currencyService}")
private ICurrencyService currencyService;
public ICurrencyService getCurrencyService() {
return currencyService;
}
public void setCurrencyService(ICurrencyService currencyService) {
this.currencyService = currencyService;
}
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String value) {
int currencyId = Integer.valueOf(value);
return getCurrencyService().getCurrencyBtId(currencyId);
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object value) {
Currency currency = (Currency) value;
int currencyId = currency.getCurrencyId();
return String.valueOf(currencyId);
}
}**
在许多问题及其答案中都可以看到,这里@FacesConverter
不适合注射.在您的情况下,您尝试通过@ManagedProperty
注入服务,这会产生NPE,正如Luiggi在对初始问题的评论中告诉您的那样.
As it can be seen in many questions, and their answers, here, @FacesConverter
is not eligible for injection. In your case, you try to inject your service via @ManagedProperty
, which yields NPE, as Luiggi told you in a comment to your initial question.
在当前的JSF版本中,您可以在转换器中注入服务的全部操作就是放弃使用@FacesConverter
并切换为使用标准的@ManagedBean
注释,因此不是通过id而是通过bean名称来引用转换器. ,例如converter="#{currencyConverter}"
中的.
With the current JSF release, all you can do to inject services in your converters is to give up using @FacesConverter
and switch to using standard @ManagedBean
annotation, thus referring to your converter not by id, but by bean name, like in converter="#{currencyConverter}"
.