如何正确使用 Spring MVC <form:select> 标记将特定对象字段的值显示到集合中?
How correctly use the Spring MVC <form:select> tag to show the value of a specific object field into a collection?
我是 Spring MVC 的新手,我很难理解 标签的工作原理。
所以我有以下情况
进入控制器我有这个方法:
@RequestMapping(value = "/consultazioneMinisteriale", method = RequestMethod.GET)
public String consultazione(Locale locale, Model model) {
List<Twb1012Regione> listaRegioni = geograficaService.getListaRegioni();
System.out.println("Numero regioni: " + listaRegioni.size());
model.addAttribute("listaRegioni", listaRegioni);
return "utenteMinisteriale/consultazione";
}
如您所见,此方法检索 Twb1012Regione 对象的列表并将其放入模型对象中,以便在 [=72= 中可用]页。
所以 Twb1012Regione class 是这样的模型对象:
@Entity
@Table(name="anagrafiche.TWB1012_REGIONE")
@NamedQuery(name="Twb1012Regione.findAll", query="SELECT t FROM Twb1012Regione t")
public class Twb1012Regione implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="COD_REG")
private String codReg;
@Column(name="DES_REG")
private String desReg;
.....................................
.....................................
OTHER FIELDS
.....................................
.....................................
}
其中 codReg 字段明确标识对象,而 desReg 包含我想显示为 [= 中的值的值46=] 标签。
最后这是我的 consultazione.jsp 视图的代码:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ page session="false"%>
<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html>
<html>
<head>
<title>Home</title>
</head>
<body class="azure">
<h1>Hello World</h1>
<!-- <div> ${listaRegioni} </div> -->
<div>
<label>Regioni:</label>
<form:select path="listaRegioni" items="${listaRegioni}"/>
</div>
</body>
</html>
问题是,这样做我获得了 select 下拉菜单,但它显示了我所有 Twb1012Regione 对象的 引用 而不是 desReg 字段。
这是 HTML 渲染输出:
<select>
<option value="it.myCompany.myProject.anagrafiche.Twb1012Regione@5a259924">it.myCompany.myProject.anagrafiche.Twb1012Regione@5a259924</option>
<option value="it.myCompany.myProject.anagrafiche.Twb1012Regione@4a87c8d3">it.myCompany.myProject.anagrafiche.Twb1012Regione@4a87c8d3</option>
<option value="it.myCompany.myProject.anagrafiche.Twb1012Regione@815b53a">it.myCompany.myProject.anagrafiche.Twb1012Regione@815b53a</option>
.................................................
.................................................
.................................................
</select>
为什么?我错过了什么?我怎样才能用每个 Twb1012Regione 的 desReg 字段的值代替对象的引用?
EDIT-1:
我试着换成:
<form:select path="regioni">
<form:options items="${listaRegioni}" itemLabel="desReg" itemValue="codReg" />
</form:select>
但现在当页面呈现时,我在堆栈跟踪中收到此错误消息:
12:44:52,112 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/WIFIPNSD].[jsp]] (http-localhost/127.0.0.1:8080-4) JBWEB000236: Servlet.service() for servlet jsp threw exception: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'regioni' available as request attribute
为什么?怎么了?我该如何解决?
- 在
<form:select>
标签中,您必须在 path
中放入 bean 属性的名称 将保留所选项目的 ID。
- 在
<form:options>
中:
items
:包含可选项目列表的 bean 属性
itemLabel
: 要在保管箱中显示的描述
itemValue
:<form:select>
路径中要保存的字段(一般为id)
<form:select path="regioni">
<form:options items="${listaRegioni}" itemLabel="desReg" itemValue="codReg" />
</form:select>
将向您显示一个包含区域所有描述 (desReg
) 的保管箱,并将在 bean 属性 regioni
[=21] 中保留所选项目的 codReg
=]
在您的控制器中,添加这行代码。让我知道:
model.addAttribute("regioni",new Twb1012Regione());
如果它不起作用,请告诉我。
我是 Spring MVC 的新手,我很难理解 标签的工作原理。
所以我有以下情况
进入控制器我有这个方法:
@RequestMapping(value = "/consultazioneMinisteriale", method = RequestMethod.GET)
public String consultazione(Locale locale, Model model) {
List<Twb1012Regione> listaRegioni = geograficaService.getListaRegioni();
System.out.println("Numero regioni: " + listaRegioni.size());
model.addAttribute("listaRegioni", listaRegioni);
return "utenteMinisteriale/consultazione";
}
如您所见,此方法检索 Twb1012Regione 对象的列表并将其放入模型对象中,以便在 [=72= 中可用]页。
所以 Twb1012Regione class 是这样的模型对象:
@Entity
@Table(name="anagrafiche.TWB1012_REGIONE")
@NamedQuery(name="Twb1012Regione.findAll", query="SELECT t FROM Twb1012Regione t")
public class Twb1012Regione implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="COD_REG")
private String codReg;
@Column(name="DES_REG")
private String desReg;
.....................................
.....................................
OTHER FIELDS
.....................................
.....................................
}
其中 codReg 字段明确标识对象,而 desReg 包含我想显示为 [= 中的值的值46=] 标签。
最后这是我的 consultazione.jsp 视图的代码:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ page session="false"%>
<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html>
<html>
<head>
<title>Home</title>
</head>
<body class="azure">
<h1>Hello World</h1>
<!-- <div> ${listaRegioni} </div> -->
<div>
<label>Regioni:</label>
<form:select path="listaRegioni" items="${listaRegioni}"/>
</div>
</body>
</html>
问题是,这样做我获得了 select 下拉菜单,但它显示了我所有 Twb1012Regione 对象的 引用 而不是 desReg 字段。
这是 HTML 渲染输出:
<select>
<option value="it.myCompany.myProject.anagrafiche.Twb1012Regione@5a259924">it.myCompany.myProject.anagrafiche.Twb1012Regione@5a259924</option>
<option value="it.myCompany.myProject.anagrafiche.Twb1012Regione@4a87c8d3">it.myCompany.myProject.anagrafiche.Twb1012Regione@4a87c8d3</option>
<option value="it.myCompany.myProject.anagrafiche.Twb1012Regione@815b53a">it.myCompany.myProject.anagrafiche.Twb1012Regione@815b53a</option>
.................................................
.................................................
.................................................
</select>
为什么?我错过了什么?我怎样才能用每个 Twb1012Regione 的 desReg 字段的值代替对象的引用?
EDIT-1:
我试着换成:
<form:select path="regioni">
<form:options items="${listaRegioni}" itemLabel="desReg" itemValue="codReg" />
</form:select>
但现在当页面呈现时,我在堆栈跟踪中收到此错误消息:
12:44:52,112 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/WIFIPNSD].[jsp]] (http-localhost/127.0.0.1:8080-4) JBWEB000236: Servlet.service() for servlet jsp threw exception: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'regioni' available as request attribute
为什么?怎么了?我该如何解决?
- 在
<form:select>
标签中,您必须在path
中放入 bean 属性的名称 将保留所选项目的 ID。 - 在
<form:options>
中:items
:包含可选项目列表的 bean 属性itemLabel
: 要在保管箱中显示的描述itemValue
:<form:select>
路径中要保存的字段(一般为id)
<form:select path="regioni">
<form:options items="${listaRegioni}" itemLabel="desReg" itemValue="codReg" />
</form:select>
将向您显示一个包含区域所有描述 (desReg
) 的保管箱,并将在 bean 属性 regioni
[=21] 中保留所选项目的 codReg
=]
在您的控制器中,添加这行代码。让我知道:
model.addAttribute("regioni",new Twb1012Regione());
如果它不起作用,请告诉我。