【问题标题】:Spring MVC form:select selected value?Spring MVC 表单:选择选定的值?
【发布时间】:2011-08-26 09:04:24
【问题描述】:

有什么方法可以通过<form:options><form:options>Spring MVC 在下拉列表中选择当前值?

【问题讨论】:

  • 问题不清楚。什么是“当前值”。你想在哪里选择它?

标签: forms spring-mvc


【解决方案1】:

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&lt;Gender&gt;
【解决方案2】:
【解决方案3】:

这是我解决此问题的方法。它很大,但很有效

性别:来自 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>

【讨论】:

    【解决方案4】:

    试试这个,它对我有用

    <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>
    

    【讨论】:

    • 谢谢 - 我整天都在努力解决这个问题!
    • 顺便说一句,这种方法的一个优点是您可以显示多个选择。
    【解决方案5】:

    我遇到了类似的问题,经过几天的斗争,我能够通过在我的模型类中实现 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>
    

    【讨论】:

      【解决方案6】:

      在将表单绑定到模型之前,您应该在 jsp 的控制器中将要选择的任何变量设置为所需的值。

          Form form = new Form();
          form.setFoo("bar");
          model.addAttribute("form", form);
      

      当表单在 jsp 中构建时,该表单变量将成为选项列表中的默认选定值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-09
        • 1970-01-01
        • 2010-10-16
        • 1970-01-01
        • 2011-02-15
        • 1970-01-01
        相关资源
        最近更新 更多