我在h:selectOneMenu沒有選定項目時遇到問題,此時已經在輔助bean上設置了某些項目。我正在使用seam並指定了一個客戶轉換器。在我的「創建」頁面上工作時,一切正常,可以選擇菜單中的某些內容,並且在提交頁面時,正確的值將被分配並保存到數據庫中。
但是,當我在「編輯」頁面上工作時,菜單的默認選擇不是當前選擇。我所經歷和證實的東西肯定是設置等h:selectOneMenu未填充「選定」項目
我selectOneMenu用於看起來是這樣的:
<h:selectOneMenu id="selVariable"
value="#{customer.variableLookup}"
converter="#{variableLookupConverter}">
<s:selectItems var="source"
value="#{customerReferenceHelper.variableLookups()}"
label="#{source.name}" />
</h:selectOneMenu>
和轉換如下。這很簡單,只是原來的ID從字符串到int和背部等:
@Name("variableLookupConverter")
public class VariableLookupConverter implements Serializable, Converter {
@In
private CustomerReferenceHelper customerReferenceHelper;
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
VariableLookup variable= null;
try {
if ("org.jboss.seam.ui.NoSelectionConverter.noSelectionValue".equals(arg2)) {
return null;
}
CustomerReferenceHelper customerReferenceHelper = (CustomerReferenceHelper) Contexts.getApplicationContext().get(
"customerReferenceHelper");
Integer id = Integer.parseInt(arg2);
source = customerReferenceHelper.getVariable(id);
} catch (NumberFormatException e) {
log.error(e, e);
}
return variable;
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
String result = null;
VariableLookup variable= (VariableLookup) arg2;
Integer id = variable.getId();
result = String.valueOf(id);
return result;
}
}
我已經看到了一些東西它可能是在equals()方法的類方法,(不加起來與其他一切工作,但我推翻它無論如何如下,其中的哈希碼只是一個標識(ID對每個項目的唯一標識符)
equals方法:
@Override
public boolean equals(Object other) {
if (other == null) {
return false;
}
if (this == other) {
return true;
}
if (!(other instanceof VariableLookup)) {
return false;
}
VariableLookup otherVariable = (VariableLookup) other;
if (this.hashCode() == otherVariable.hashCode()) {
return true;
}
return false;
}
我在我的智慧結束了這一點,我找不到我可能錯過了什麼?!任何幫助將不勝感激。
更新:據我瞭解,當建立列表時,它檢查每個項目的綁定值以查看它們是否匹配以設置所選項目。在equals方法中放入一些調試語句表明,在構建列表的過程中,所有比較都因爲與空對象的比較而失敗,但是在檢查接縫調試頁面時,它顯示該值已明確設置。
Omnifaces有一個SelectItemConverter它可以解決你的問題。 http://showcase-omnifaces.rhcloud.com/showcase/converters/SelectItemsConverter.xhtml – bhdrkn