Sto usando il managedBean UserHome in requestScope, in cui l'entità 'utente' sarà persistono. L'utente ha la colonna capo che viene mappata in ManyToOne Codice relation.My assomiglia a questoJSF convertitore Errore di convalida: il valore non è valido per SelectOneMenu UIComponent
@ManagedBean
@RequestScoped
public class UserHome {
private User user = new User();
// Getters and Setters
private List<SelectItem> selectItems = new ArrayList<SelectItem>();
public UserHome() {
for(User user: availableLeaders) {
selectItems.add(new SelectItem(user.getName(), user));
}
}
public void persis();
}
User.java
public class User {
@Id
@Column
private Integer id;
@Column
privat String name;
@ManyToOne
private User leader;
}
Sto cercando di ottenere il valore di questo leader attraverso h:selectOneMenu
come questo
<h:selectOneMenu value="#{userHome.user.leader}" converter="userConverter">
<f:selectItems value="#{userHome.selectItems}"/>
</h:selectOneMenu>
mio convertitore si presenta così
@FacesConverter(forClass = User.class, value="userConverter")
public class UserConverter implements Converter {
private Map<String, User> userValues = new HashMap<String, User>();
public UserConverter() {
init();
}
@Override
public Object getAsObject(FacesContext context, UIComponent component,
String value) {
return userValues.get(value);
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
System.out.println("RAJASEKARAN "+value);
return ((User)value).getName();
}
public void init() {
UserHome userHome = new UserHome();
for(User user:userHome.availableLeaders()) {
userValues.put(user.getName(), user);
}
}
}
Mentre cercare di salvare l'utente Sto ottenendo l'USEREDIT errore: j_idt18: convalida errore: Valore non è valido
Salve, dove si trova esattamente nel codice mojarra, che ciò equivale al controllo.Sto scrivendo un componente personalizzato, e mi sono imbattuto in questo problema, e voglio eseguire il debug del codice mojarra per vedere cosa succede. Grazie –
Questo succede in "UISelectMany # validateValue', con la chiamata effettiva a" equals' che accade in "SelectUtils # matchValue". –
Sì, dopo un sacco di debug, sono in grado di capirlo, questa è una cattiva pratica da non convalidare? Il mio componente personalizzato si estende da UISelectOne, e questo metodo validateValue mi dà molto dolore, se ho overidde questo metodo con il contenuto vuoto, allora le cose funzionano correttamente. Ma ho la sensazione che sia qualcosa che non dovrei fare. Qualche pensiero? –