通常我實現我的jsf轉換器作爲我的例子。但是如果我有10個組件需要轉換器,我也需要10個轉換器。JSF轉換器全局解決方案
問題:給它一個更好的解決方案或一個jsf轉換器的全局解決方案,以便不是每個組件都需要他自己的轉換器嗎?
轉換器:
@FacesConverter(value="PersonConverter")
public class PersonConverter implements Converter{
@Override
public Object getAsObject(FacesContext context, UIComponent component,
String value) {
if(value != null){
MyBean bean = (MyBean)FacesContext.getCurrentInstance().getViewRoot().getViewMap().get("myBean");
for(Person p : bean.getSearchedPersons()){
if(p.getName().equals(value)){
return p;
}
}
}
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component,
Object value) {
if(value != null && value instanceof Person){
return ((Person)value).getName();
}
return null;
}
}
豆:
@ViewScoped
@ManagedBean
public class MyBean {
@EJB
private PersonService service;
private List<Person> searchedPersons;
private Person selectedPerson;
public void printSelectedPerson(ActionEvent event) {
System.out.println("Selected Person: "
+ selectedPerson.getName());
}
public List<Person> searchValues(String str) {
searchedPersons = service.searchPerson(str);
return searchedPersons;
}
/** GETTER & SETTER */
XHTML:
<h:form id="mainform">
<p:autoComplete completeMethod="#{myBean.searchValues}" value="#{myBean.selectedPerson}"
converter="PersonConverter" var="p" itemLabel="#{p.name}" itemValue="#{p}" forceSelection="true"/>
<p:commandButton value="Test" actionListener="#{myBean.printSelectedPerson}"/>
<p:messages globalOnly="false" autoUpdate="true"/>
</h:form>
這是一個解決方案,我搜索(鏈接)。非常大的謝謝:) – pL4Gu33
@ pL4Gu33不客氣。 – Makky
@ pL4Gu33只是爲了讓你知道SelectItemsConverter不適用於自動完成.Omnifaces有一個不同的轉換器,但有一些問題。所以,爲了自動完成,請使用鏈接中的一個。 – Makky