【发布时间】:2013-03-28 17:23:18
【问题描述】:
我有一个 primefaces selectOneMenu,它使用 javax.faces.convert.Converter 来显示设备。
只有当key(设备的id)不大于127时才能正常工作。当大于127时,单击commandButton后selectOneMenu的箭头变为红色,并且commandButton的动作不执行。
为什么?有什么想法吗?
<p:selectOneMenu id="deviceActionParameter"
value="#{sm.ruleConfigureBean.deviceActionParameter}"
style="width:200px;">
<f:selectItems value="#{sm.ruleConfigureBean.sensors}"
var="device" itemLabel="#{device.name}" />
<f:converter converterId="deviceConverter" />
</p:selectOneMenu>
转换器:
@FacesConverter(value = "deviceConverter")
public class DeviceConverter implements Converter {
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String key) {
DeviceDao deviceDao = GuiceSingleton.getInstance().getInstance(
DeviceDao.class);
try {
Device device = deviceDao.getDeviceById(new Long(key)); // this works
return device;
} catch (Exception e) {
return null;
}
}
@Override
public String getAsString(FacesContext context, UIComponent component,
Object value) {
if (value != null && value instanceof Device) {
Device device = (Device) value;
return "" + device.getIdDevice();
}
return "";
}
}
【问题讨论】:
-
是否抛出异常?
-
在与
==比较时,我闻到了一些Integers 的味道。 -
一个“过早优化”的案例,如果你问我
-
尝试在转换器的 catch 块中生成日志。
-
@RodrigoSasaki 不,任何异常都会被抛出。
标签: java jsf primefaces selectonemenu