gpt4 book ai didi

JSF 转换器验证错误 : value is not valid for SelectOneMenu UIComponent

转载 作者:行者123 更新时间:2023-12-03 03:30:25 26 4
gpt4 key购买 nike

我在 requestScope 中使用 ManagedBean userHome,其中实体 'user' 将被持久化。用户具有映射为 ManyToOne 关系的前导列。我的代码如下所示

@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();
}

用户.java

public class User {
@Id
@Column
private Integer id;

@Column
privat String name;

@ManyToOne
private User leader;
}

我试图通过h:selectOneMenu获取这位领导者的值(value)像这样

<h:selectOneMenu value="#{userHome.user.leader}" converter="userConverter">
<f:selectItems value="#{userHome.selectItems}"/>
</h:selectOneMenu>

我的转换器看起来像这样

@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);
}
}
}

在尝试保存用户时,我收到错误 UserEdit:j_idt18: Validation Error: Value is not valid

最佳答案

添加到 BalusC 的答案:回发后,您需要确保 User 实例与您用于渲染所选项目的实例完全相同,或者为您的 User 类实现 equals。

代码没有显示 availableLeaders 来自何处,但如果这是按需从数据库获取的,那么转换器将不会转换为与列表中完全相同的对象实例JSF 通过 #{userHome.selectItems} 进行解析。

转换后,JSF 将使用 equals() 方法检查是否可以在该列表中找到转换后的实例。

关于JSF 转换器验证错误 : value is not valid for SelectOneMenu UIComponent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7131642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com