如何显示所有枚举值 用枚举属性作为标签(How to display all enum val

2019-10-20 14:41发布

我有一个RoleStatus枚举其是作为的一个属性Role映射到在DB的整数单位(但该部分是不相关的)。 我想呈现List<Role><p:dataTable>其中一列应具有<h:selectOneMenu>RoleStatus所述的属性Role的实体。 我怎么能有或没有实现这个OmniFaces ?

这里的枚举:

public enum RoleStatus {

    ACTIVE(1, "Active"),
    DISABLE(2, "Disable");

    private final int intStatus;
    private final String status;

    private RoleStatus(int intStatus, String status) {
        this.intStatus = intStatus;
        this.status = status;
    }

    public int getIntStatus() {
        return status;
    }

    public String getStatus() {
        return status;
    }

}

下面是支持bean:

@ManagedBean
@ViewScoped
public class RoleController {

    private List<Role> roles;

    @ManagedProperty("#{roleService}")
    private IRoleService roleService;

    @PostConstruct
    public void init() {
        roles = roleService.getRoles();
    }

    public List<Role> getRoles() {
        return roles;
    }

}

最后,我想在那里的数据表具有<h:selectOneMenu>RoleStatus的属性Role的实体,表示作为选择项目的选项的所有可用的枚举值。

<h:form id="roleForm">
    <p:dataTable value="#{roleController.roles}" var="role">
        <p:column>
            <h:outputText value="#{role.roleid}" />
        </p:column>
        <p:column>
            <h:inputText value="#{role.role}" />
        </p:column>
        <p:column>
            <h:inputText value="#{role.description}" />
        </p:column>
        <p:column>
            <h:selectOneMenu value="#{role.roleStatus}">
                <!-- How??? -->
            </h:selectOneMenu>
        </p:column>
    </p:dataTable>
</h:form>

我怎样才能做到这一点? 我需要的OmniFaces SelectItemsConverter

Answer 1:

你并不需要一个转换器。 JSF会已经内置枚举器。

如果没有OmniFaces,这里是你如何能提供枚举值的可用项目<h:selectOneMenu>

  1. 这种方法添加到RoleController

     public RoleStatus[] getRoleStatuses() { return RoleStatus.values(); } 

    这样,所有枚举值都可以通过#{roleController.roleStatuses}

  2. 然后用这个下拉菜单:

     <h:selectOneMenu value="#{role.roleStatus}"> <f:selectItems value="#{roleController.roleStatuses}" var="roleStatus" itemValue="#{roleStatus}" itemLabel="#{roleStatus.status}" /> </h:selectOneMenu> 

    注意:因为这些值是静态/应用程序范围,它不会伤害到方法移到一个单独的@ApplicationScoped豆。


随着OmniFaces,你可以删除其他吸气,只是直接通过导入枚举<o:importConstants>

  1. 增加这个地方在模板的顶部(假设它在com.example包):

     <o:importConstants type="com.example.RoleStatus" /> 

    这样,枚举类本身可以通过#{RoleStatus} (注意大小写!)。

  2. 然后用这个下拉菜单:

     <h:selectOneMenu value="#{role.roleStatus}"> <f:selectItems value="#{RoleStatus.values()}" var="roleStatus" itemValue="#{roleStatus}" itemLabel="#{roleStatus.status}" /> </h:selectOneMenu> 


文章来源: How to display all enum values as with enum property as label