JSF Primefaces:如何使用枚举中的特定序号设置 <f:selectItems> 的默认值?
JSF Primefaces: How to set default value of <f:selectItems> using specific ordinal in enum?
在我的 pom.xml:
中使用 Java 1.8、lombok 和以下版本的 JSF Primefaces
<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 枚举:
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/view:
@Named
@ViewScoped
@Data
public class SportsView implements Serializable {
private SportType sportType;
public SportType[] getSportTypes() {
return SportType.values();
}
}
sports.xhtml(对应的JSF文件):
<!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>
我想做的是在下拉列表中将其默认设置为 FOOTBALL,但是当我单击“提交”时,它显示为空?它确实默认为 FOOTBALL,但在我提交表单时没有设置它。
当我提交表格时(没有选择任何其他运动类型)需要它设置为 2 的序号(对于 FOOTBALL)...
非常感谢任何帮助!
在Bean
中设置默认值
@Named
@ViewScoped
@Data
public class SportsView implements Serializable {
private SportType sportType = SportsType.FOOTBALL;
public SportType[] getSportTypes() {
return SportType.values();
}
}
在sports.xhtml中,将<p:selectOneMenu value=""
修改为
<h:outputText value="Pick Sports Type"/>
<p:selectOneMenu
value="#{sportsView.sportType}">
#{sportsView.sportTypes[2]}
将正确呈现为 SportsType.FOOTBALL
,但请记住,您没有将 sportType
指定为您在 [=17= 中选择的值的容器],
当您提交表单时,sportType
仍然是 null
.
也不要混淆 #{sportsView.sportType}
和 var="sportType"
var 只是一个临时变量,用于遍历 #{sportsView.sportTypes}
数组,您可以将其替换为:
<f:selectItems
value="#{sportsView.sportTypes}"
var="temp"
itemValue="#{temp}"
itemLabel="#{temp.getByNumber(temp.ordinal())}"/>
在我的 pom.xml:
中使用 Java 1.8、lombok 和以下版本的 JSF Primefaces<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 枚举:
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/view:
@Named
@ViewScoped
@Data
public class SportsView implements Serializable {
private SportType sportType;
public SportType[] getSportTypes() {
return SportType.values();
}
}
sports.xhtml(对应的JSF文件):
<!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>
我想做的是在下拉列表中将其默认设置为 FOOTBALL,但是当我单击“提交”时,它显示为空?它确实默认为 FOOTBALL,但在我提交表单时没有设置它。
当我提交表格时(没有选择任何其他运动类型)需要它设置为 2 的序号(对于 FOOTBALL)...
非常感谢任何帮助!
在Bean
中设置默认值@Named
@ViewScoped
@Data
public class SportsView implements Serializable {
private SportType sportType = SportsType.FOOTBALL;
public SportType[] getSportTypes() {
return SportType.values();
}
}
在sports.xhtml中,将<p:selectOneMenu value=""
修改为
<h:outputText value="Pick Sports Type"/>
<p:selectOneMenu
value="#{sportsView.sportType}">
#{sportsView.sportTypes[2]}
将正确呈现为 SportsType.FOOTBALL
,但请记住,您没有将 sportType
指定为您在 [=17= 中选择的值的容器],
当您提交表单时,sportType
仍然是 null
.
也不要混淆 #{sportsView.sportType}
和 var="sportType"
var 只是一个临时变量,用于遍历 #{sportsView.sportTypes}
数组,您可以将其替换为:
<f:selectItems
value="#{sportsView.sportTypes}"
var="temp"
itemValue="#{temp}"
itemLabel="#{temp.getByNumber(temp.ordinal())}"/>