我正在使用JSF设置一个表单(我是这个领域的新手),我得到了一个
Validation Error: Value is not valid
其中一个字段上的消息。这个字段实际上是一个单独的对象(如下所示),它有一个自定义转换器。
以下是我的资料(删除了非相关代码):
我有一个
Citation
班级:
@ManagedBean(name="citation")
public class Citation {
private int id;
private Status status;
}
我也有一个
Status
类中引用的
引用
班级:
@ManagedBean(name="status")
public class Status {
private int id;
private String name;
public List<Status> getAllStatuses() {
Session session = HibernateUtil.getCurrentSession();
session.beginTransaction();
session.clear();
Query query = session.createQuery("from Status");
List<Status> statuses = query.list();
try {
session.getTransaction().commit();
} catch (HibernateException e) {
session.getTransaction().rollback();
}
return statuses;
}
@Override
public boolean equals(Object obj) {
if (obj == null) return false;
if (!(obj instanceof Status)) return false;
if (this.id == ((Status)obj).getId()) {
return true;
} else {
return false;
}
}
@Override
public int hashCode() {
return this.name.hashCode();
}
}
那么对于我的表格,我有:
<h:selectOneMenu id="citation_status" value="#{citation.status}">
<f:selectItems value="#{status.allStatuses} var="s" itemValue="#{s.id}" itemLabel="#{s.name}" />
</h:selectOneMenu>
<h:message for="citation_status" />
最后,对于我的转换器,我有:
@FacesConverter(forClass=Status.class)
public class StatusConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
return String.valueOf(((Status) value).getId());
}
}
现在,当我拿到我的表格并提交时,我得到
Validation Error
状态旁边。我是个新手,多亏了@balusc,我已经走了这么远了。
非常感谢您的帮助。