【发布时间】:2011-08-26 09:04:24
【问题描述】:
有什么方法可以通过<form:options><form:options>Spring MVC 在下拉列表中选择当前值?
【问题讨论】:
-
问题不清楚。什么是“当前值”。你想在哪里选择它?
标签: forms spring-mvc
有什么方法可以通过<form:options><form:options>Spring MVC 在下拉列表中选择当前值?
【问题讨论】:
标签: forms spring-mvc
if else 不需要使用
例子:
Student student = new Student();
student.gender = "F";
model.addObject("student", student);
Map<String, String> genders = new LinkedHashMap<String, String>();
genders.put("M", "Male");
genders.put("F", "Female");
model.addObject("genders", genders);
JSP 代码
modelAttribute & commandName 可以互换
<c:url value="/Student/Edit" var="editstudenturl"/>
<form:form method="post" action="${editstudenturl}" modelAttribute="student" class="form-horizontal">
<form:select path="gender" class="form-control" id="gender" >
<form:options items="${genders}" />
</form:select>
</form:form>
【讨论】:
Map 上有两种类型的options 时,这将起作用。但这不适用于对象列表,例如 List<Gender> 。
这是我解决此问题的方法。它很大,但很有效
性别:来自 java 模型的限定符
// model.addAttribute("genders", genders);
帐户:绑定模型属性为 spring 表单
fmt:message:将 m 翻译为“Mees”(爱沙尼亚语)
<form:select path="cfGender">
<c:forEach var="item" items="${genders}">
<c:choose>
<c:when test="${account.getCfGender().getCfGender()==item.getCfGender()}">
<form:option selected="true" value="${item.getCfGender()}">
<fmt:message key="cf_gender.${item.getCfGender()}" />
</form:option>
</c:when>
<c:otherwise>
<form:option value="${item.getCfGender()}">
<fmt:message key="cf_gender.${item.getCfGender()}" />
</form:option>
</c:otherwise>
</c:choose>
</c:forEach>
</form:select>
【讨论】:
试试这个,它对我有用
<form:select path="size">
<c:forEach items="${sizeList}" var="s" varStatus="status">
<c:choose>
<c:when test="${s eq 25}">
<option value="${s}" selected="true">${s}</option>
</c:when>
<c:otherwise>
<option value="${s}">${s}</option>
</c:otherwise>
</c:choose>
</c:forEach>
</form:select>
【讨论】:
我遇到了类似的问题,经过几天的斗争,我能够通过在我的模型类中实现 hash 和 equal 方法来解决它。问题是 spring 无法确定下拉列表中的项目在哪里等于模型中的值。但是在模型对象中实现了 hash 和 equals 之后,一切正常。
@Entity
@Table(name = "BANKS")
public class Bank implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = -8928809572705999915L;
private Long id;
private String bankCode;
private String bankName;
...........
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((bankCode == null) ? 0 : bankCode.hashCode());
result = prime * result
+ ((bankName == null) ? 0 : bankName.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Bank other = (Bank) obj;
if (bankCode == null) {
if (other.bankCode != null)
return false;
} else if (!bankCode.equals(other.bankCode))
return false;
if (bankName == null) {
if (other.bankName != null)
return false;
} else if (!bankName.equals(other.bankName))
return false;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
在视图中我有这样的东西
<form:select path="bank" cssClass="form-control" required="true">
<form:option value="">--Select--</form:option>
<form:options items="${banks}" itemLabel="bankName"
itemValue="bankCode" />
</form:select>
【讨论】:
在将表单绑定到模型之前,您应该在 jsp 的控制器中将要选择的任何变量设置为所需的值。
Form form = new Form();
form.setFoo("bar");
model.addAttribute("form", form);
当表单在 jsp 中构建时,该表单变量将成为选项列表中的默认选定值。
【讨论】: