[英]FacesConverter fail when id greater than 127?
我有一個primefaces selectOneMenu,它使用javax.faces.convert.Converter來顯示設備。
僅當鍵(設備的ID)不大於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 "";
}
}
我相信這是Java Integer 緩存機制的優化,
Integer int1=128;
Integer int2=128;
if(int1==int2)
System.out.println("yes");
else
System.out.println("no");
對於[-128, 127]
范圍內的整數,將顯示yes
,否則顯示no
。
如果equals
比使用它將yes
所有的時間。
解決方案:
更改getDeviceById()
以使用equals
我相信在更高版本中可以增加此范圍
問題不在轉換器中,而在設備類中-我正在將Longs與==進行比較。
現在好啦:
@Override
public boolean equals(Object o) {
if (o instanceof Device) {
return idDevice.equals(((Device) o).getIdDevice());
}
return false;
}
感謝您的回答:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.