Forms spring表单:带有枚举的选项标记
我在显示具有正确值的下拉列表时遇到问题。我正在使用Forms spring表单:带有枚举的选项标记,forms,spring,spring-mvc,enums,Forms,Spring,Spring Mvc,Enums,我在显示具有正确值的下拉列表时遇到问题。我正在使用、和标记,但我无法让它显示正确的选项。使用下面的代码,我应该只列出“选项2”、“选项7”和“选项8” *注意-我不想显示所有可能的枚举值,但出于某种原因,Spring似乎希望显示所有枚举值。它似乎完全忽略了提供给标记的列表 JSP标记 <spring-form:select path="selectOptions"> <spring-form:option value="" label="*** Select Optio
、
和
标记,但我无法让它显示正确的选项。使用下面的代码,我应该只列出“选项2”、“选项7”和“选项8”
*注意-我不想显示所有可能的枚举值,但出于某种原因,Spring似乎希望显示所有枚举值。它似乎完全忽略了提供给
标记的列表
JSP标记
<spring-form:select path="selectOptions">
<spring-form:option value="" label="*** Select Option ***" />
<spring-form:options path="${availableOptions}" />
</spring-form:select>
控制器
public class SpringController implements SpringControllerInterface {
/**
* /WEB-INF/jsp/myJSP.jsp.
*/
private static final String PAGE = "/WEB-INF/jsp/myJSP.jsp";
/**
* {@inheritDoc}
*/
@Override
public ModelAndView load(final Model model) {
final ModelAndView mav = new ModelAndView(PAGE);
final List<SelectOptions> availableOptions = this.getAvailableOptions();
mav.addObject("availableOptions", availableOptions);
return mav;
}
/**
* {@inheritDoc}
*/
@Override
public ModelAndView save(final Model model) {
final ModelAndView mav = new ModelAndView(PAGE);
// TODO
return mav;
}
/**
* {@inheritDoc}
*/
@Override
public Model getModel() {
return new ModelImpl();
}
/**
* @return a list of available options
*/
public List<SelectOptions> getAvailableOptions() {
final List<SelectOptions> availableOptions = Lists.newArrayList();
availableOptions.add(SelectOptions.OPTION_1);
availableOptions.add(SelectOptions.OPTION_7);
availableOptions.add(SelectOptions.OPTION_8);
return availableOptions;
}
}
如果您使用的是
标记,您甚至不需要使用items属性。选项标签:
呈现HTML“选项”标记的列表。根据绑定值适当设置“已选择”。
参考资料。
因此,对于您的需要,我想回到使用
就足够了。这个问题的解决方案似乎是我在
标记中使用了属性“path”。它应该是“项目”,而不是“路径”
更正的JSP片段:
<spring-form:select path="selectOptions">
<spring-form:option value="" label="*** Select Option ***" />
<spring-form:options items="${availableOptions}" />
</spring-form:select>
如果您创建了一个spring控制器,并且希望向jsp页面传递一个枚举,您可以这样做: 枚举示例:
public enum Coin {
HEADS("Heads", "heads"),
TAILS("Tails", "tails");
private final String fullName;
private final String shortName;
private Coin(String fullName, String shortName) {
this.fullName = fullName;
this.shortName = shortName;
}
public String getFullName() {
return fullName;
}
public String getShortName() {
return shortName;
}
}
model.addObject("coins", Coin.values());
<form:select path="selection">
<form:options items="${coins}" itemValue="shortName" itemLabel="fullName" />
</form:select>
将此枚举传递给您的模型:
public enum Coin {
HEADS("Heads", "heads"),
TAILS("Tails", "tails");
private final String fullName;
private final String shortName;
private Coin(String fullName, String shortName) {
this.fullName = fullName;
this.shortName = shortName;
}
public String getFullName() {
return fullName;
}
public String getShortName() {
return shortName;
}
}
model.addObject("coins", Coin.values());
<form:select path="selection">
<form:options items="${coins}" itemValue="shortName" itemLabel="fullName" />
</form:select>
在jsp页面中与表单一起使用它:
public enum Coin {
HEADS("Heads", "heads"),
TAILS("Tails", "tails");
private final String fullName;
private final String shortName;
private Coin(String fullName, String shortName) {
this.fullName = fullName;
this.shortName = shortName;
}
public String getFullName() {
return fullName;
}
public String getShortName() {
return shortName;
}
}
model.addObject("coins", Coin.values());
<form:select path="selection">
<form:options items="${coins}" itemValue="shortName" itemLabel="fullName" />
</form:select>
btw,我可以使用html和c标记来创建列表,但我希望能够正确地使用spring表单标记。我确信我只是错过了一些愚蠢的东西。我想你已经检查了getAvailableOptions()返回,以确保可用选项的列表是正确的?你能提供那段代码吗,以及在所有东西都呈现到浏览器后可能得到的HTML?availableOptions是我在控制器中简单创建的一个列表。是的,我已经确认它有我期望的3个选项。这样做会显示枚举中的每个值-这不是我想要做的。