1
信息selectOneMenu用於顯示提交後總是最後一個項目在列表中選擇的項目
- JSF 2.0
- Primefaces 3.4
- 這兩個對象是人對象
我有一個簡單的降下拉菜單包含在表單提交表單中(AJAX呼叫):
<h:form>
....
<p:selectOneMenu converter="personconverter"
value="#{searchperson.viewPerson.relatedTo}" filter="true"
filterMatchMode="startsWith">
<f:selectItems value="#{searchperson.people}" var="person"
itemLabel="#{person.fullName}" itemValue="#{person}" />
</p:selectOneMenu>
....
<p:commandButton value="Save"
actionListener="#{searchperson.updatePerson}" />
</h:form>
當我向服務器提交請求時,綁定到selectOneMenu的對象正確傳遞,並且能夠使用此更改更新後端。
當頁面被重新呈現,P中的值:selectOneMenu用於:
(value="#{searchperson.viewPerson.relatedTo}")
不會呈現剛提交了新的變化。它呈現人員列表中的最後一個Person對象。
下面是另件:
轉換器:
@FacesConverter("personconverter")
public class PersonConverter implements Converter {
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String value) {
People pApi = new People();
Person per = new Person();
try {
per = pApi.getPerson(Long.parseLong(value));
}
catch(Exception e) {
e.printStackTrace();
}
return per;
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
return String.valueOf(((Person) arg2).getId());
}
}
對象類
@Override
public boolean equals(Object object) {
return true; //just to pass through temporarily
}
@Override
public int hashCode() {
return 0;
}
面-config.xml中
<converter>
<converter-for-class>com.obj.Person</converter-for-class>
<converter-class>com.converter.PersonConverter</converter-class>
</converter
啊 - 謝謝你。我對JSF比較陌生,所以我查了一下這兩種方法的用途。而你爲什麼看到我所做的解釋很有道理。非常感激。 – user2124871 2013-04-24 18:38:08
不客氣。這不一定與JSF有關。這是基本Java的基本部分。另請參閱http://docs.oracle.com/javase/tutorial/java/IandI/objectclass.html – BalusC 2013-04-24 18:40:08
額外PS - 您的博客/條目對我的學習非常有幫助。 – user2124871 2013-04-24 18:40:37