5
這裏是我的selectOneMenu用於selectOneMenu用於JSF與轉換器
<h:selectOneMenu value="#{bean.myObject}" >
<f:ajax render="componentToRender" listener="#{bean.onSelect}"/>
<f:converter converterId="myObjectConverter" />
<f:selectItem itemLabel="None" itemValue="#{null}" />
<f:selectItems value="#{bean.objects}" var="object" itemValue="#{object}" itemLabel="#{object.name}" />
</h:selectOneMenu>
我的轉換器
@FacesConverter("myObjectConverter")
public class MyObjectConverter implements Converter{
private List<MyObject> objects;
public MyObjectConverter(){
this.objects = MyController.getAllMyObjects();
}
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if(!StringUtils.isInteger(value)) {
return null;
}
return this.getMyObject(value);
}
public String getAsString(FacesContext context, UIComponent component, Object value) {
if(value == null) {
return null;
}
return String.valueOf(((MyObject) value).getId()).toString();
}
public MyObject getMyObject(String id) {
Iterator<MyObject > iterator = this.objects.iterator();
while(iterator.hasNext()) {
MyObject object = iterator.next();
if(object.getId() == Integer.valueOf(id).intValue()) {
return object;
}
}
return null;
}
}
的問題是,我的AJAX監聽不會被調用,我的分量從來沒有顯示。 我的轉換器或selectOneMenu有問題嗎?我遵循一個例子,我無法找出錯誤。
BTW:我在bean
public void onSelect() {
System.out.println(this.myObject);
if(this.myObject != null) {
System.out.println(this.myObject.getName());
}
}
簡單的方法,我已經有這樣的問題,我改變了我的選擇值從對象ID。但在這裏我想讓它與對象一起工作,因爲我知道這是可能的。
謝謝
請添加''或''和包括其ID'的'爲好。機會很大,你會最終得到所需的轉換錯誤面信息。或者,只需在服務器日誌中查看排隊但未顯示的臉部消息即可。或者甚至可能有一個具體的例外,它應該已經是整個答案,比如'NullPointerException',它表示一個相當平凡的Java邏輯問題。 –
BalusC
我可以補充說,當我在列表中選擇「無」項時,它會進入偵聽器方法。 –
是的,你是對的,我有一個驗證錯誤(值不正確)。這意味着它是我的轉換器?我認爲它是一個非常簡單的轉換器。 –