【发布时间】:2016-02-03 16:27:41
【问题描述】:
我按照How to use enum values in f:selectItem(s) 的建议构建了一个采用枚举值的 h:selectOneMenu。这工作正常,直到我重新加载页面。
如果我重新加载页面 (Strg+R) 用户可以执行的操作,#{bean.relationship} 属性将变为 null。所有其他属性,例如字符串、数字等,都保持原来的状态(Bean 是 @ViewScoped 和 @ManagedBean)。
这是来自 JSF 的代码:
<h:selectOneMenu value="#{bean.relationship}">
<f:selectItems value="#{bean.relationshipTypes}"
var="types" itemValue="#{types}" itemLabel="#{types}" />
</h:selectOneMenu>
<h:inputText value="#{bean.name}" />
这里是 Enum 中的代码:
public enum RelationshipType {
Family,
Friend
}
这里是 Bean 的代码:
private RelationshipType relationship; // plus getter & setter
private RelationshipType[] relationshipTypes;
private String name; // plus getter & setter
public RelationshipType[] getRelationshipTypes() {
return RelationshipType.values();
}
枚举是更大实体的一部分。为了便于显示缩短版本。有什么想法吗?
@Geinmachi:然而,存储在 bean 中的其他值在重新加载后仍然存在(例如名称)。那么,为什么不针对与枚举相关的属性呢?
【问题讨论】:
-
页面刷新后
@ViewScoped的状态不会被保留。 -
这个“枚举”有什么关系?如果它确实适用于字符串的arrayList,请创建一个minimal reproducible example
-
@Geinmachi:是的,但对于字符串、数字等也是如此。除非自动字符串枚举转换失败...