【问题标题】:h:selectOneMenu with values from an enum becomes null after reloadh:selectOneMenu 具有来自枚举的值在重新加载后变为 null
【发布时间】: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:是的,但对于字符串、数字等也是如此。除非自动字符串枚举转换失败...

标签: jsf enums


【解决方案1】:

我使用枚举作为数据类型

枚举

public enum Datatypes {
INT("Int"), FLOAT("Float"), DOUBLE("Double"), STRING("String"), DATE("Date"), DATETIME(
        "DateTime"), BLOB("Blob");

private final String dataType;

private Datatypes(String dataType) {
    this.dataType = dataType;
}

public String getDataType() {
    return this.dataType;
}

@Override
public String toString() {
    return dataType;
}

}

private List<Datatypes> datatypes = Arrays.asList(Datatypes.values());

public List<Datatypes> getDatatypes() {
    return datatypes;
}

public void setDatatypes(List<Datatypes> datatypes) {
    this.datatypes = datatypes;
}

xhtml

 <p:selectOneMenu value="#{bean.dataType}">
 <f:selectItem itemLabel="Select Data type"/>
 <f:selectItems value="#{bean.dataTypes}" />
 </p:selectOneMenu>

它对我有用。

【讨论】:

  • 你没有回答问题。
猜你喜欢
  • 1970-01-01
  • 2011-07-29
  • 2021-04-11
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 1970-01-01
相关资源
最近更新 更多