首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSF :如何使用枚举中的特定序号设置<f:selectItems>的默认值?

JSF :如何使用枚举中的特定序号设置<f:selectItems>的默认值?
EN

Stack Overflow用户
提问于 2021-05-25 05:51:24
回答 1查看 391关注 0票数 0

在我的pom.xml中,Am使用Java1.8、lombok和以下版本的:

代码语言:javascript
复制
<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>7.0</version>
</dependency>

<dependency>
    <groupId>org.primefaces.extensions</groupId>
    <artifactId>primefaces-extensions</artifactId>
    <version>7.0.3</version>
</dependency>

下面是我在下拉列表中使用的SportsType枚举:

代码语言:javascript
复制
public enum SportsType {
   
    /**
     * Ordinal: 0 
     */
    BASKETBALL,
   
    /**
     * Ordinal: 1
     */
    BASEBALL,

    /**
     * Ordinal: 2
     */
    FOOTBALL

    public static SportsType getByNumber(int number) {
        if (number < 0 || number >= values().length) {
            return FOOTBALL;
        }
        return values()[number];
    }

}

这是我的bean/视图:

代码语言:javascript
复制
@Named
@ViewScoped
@Data
public class SportsView implements Serializable {

    private SportType sportType;
        
    public SportType[] getSportTypes() {
        return SportType.values();
    }

}

sports.xhtml (对应的JSF文件):

代码语言:javascript
复制
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui"
      xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
>
<head>
    <title>Create new Team Form</title>
    <style type="text/css">
    </style>
</head>

<ui:composition>
<ui:define name="content">
    <h:form id="createNewSportTeamForm">

      <h:outputText value="Pick Sports Type"/>
            <p:selectOneMenu
                    value="#{sportsView.sportTypes[2]}">
                <f:selectItems
                   value="#{sportsView.sportTypes}"
                   var="sportType"
                   itemValue="#{sportType}"
                   itemLabel="#{sportType.getByNumber(sportType.ordinal())}"/>
            </p:selectOneMenu>

    <!-- 
       Submit button and other UI elements intentionally omitted for brevity
    -->
    </h:form>
</ui:define>
</ui:composition>
</html>

我要做的是让它默认为足球,在下拉列表中,但当我点击提交,它会出现为空?它是默认的足球,但它没有设置它时,我提交的表格。

需要它设置序号2(足球)时,我提交的表格(不选择任何其他体育类型).

任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-25 09:11:36

Bean中设置默认值

代码语言:javascript
复制
@Named
@ViewScoped
@Data
public class SportsView implements Serializable {

    private SportType sportType = SportsType.FOOTBALL;
    
    public SportType[] getSportTypes() {
        return SportType.values();
    }
}

sports.xhtml中,将<p:selectOneMenu value=""修复为

代码语言:javascript
复制
<h:outputText value="Pick Sports Type"/>
        <p:selectOneMenu
                value="#{sportsView.sportType}">

#{sportsView.sportTypes[2]}将被正确地呈现为SportsType.FOOTBALL,但请记住,您没有将sportType指定为在<p:selectOneMenu/>中选择的值的容器,而当您提交表单时,sportType仍然是null

也不要把#{sportsView.sportType}和var="sportType"混淆起来。

var只是一个用于迭代#{sportsView.sportTypes}数组的临时变量,您可以用以下方法替换它:

代码语言:javascript
复制
            <f:selectItems
               value="#{sportsView.sportTypes}"
               var="temp"
               itemValue="#{temp}"
               itemLabel="#{temp.getByNumber(temp.ordinal())}"/>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67682414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档