开发者

Spring MVC form:select selected value?

开发者 https://www.devze.com 2023-03-31 12:05 出处:网络
Is there any way to select current value in dropdown list by Spring MVC by<form:options&开发者_如何学运维gt;?No need to use if else

Is there any way to select current value in dropdown list by Spring MVC by <form:options&开发者_如何学运维gt;?


No need to use if else

Example:

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 Code

modelAttribute & commandName are interchangeable

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


Sets 'selected' as appropriate based on bound value.

http://static.springsource.org/spring/docs/2.0.x/reference/spring-form.tld.html#spring-form.tld.options


Here's my fix to this problem. Its massive, but it works

genders: qualifier from java model

// model.addAttribute("genders", genders);

account: binded modelattribute for spring forms

fmt:message: translates m to "Mees" (Estonian)

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


Try this, it works for me

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


I had similar problem and after several days of battling with it, I was able to fix it by implementing hash and equal methods in my model class. The problem is that spring was not able to determine where an item in the drop down is equals to a value in the model. But after implementing the hash and equals in the model object, everything worked fine.

@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;
}

And in the view i have something like this

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


prior to binding the form to the model, you should set whatever variable you want to be selected to the desired value in the controller of your jsp.

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

When the form is built in the jsp, that form variable will be the default selected value in your options list.


Need to set both these attributes itemLabel and itemValue to preselect the value eg: <form:options items="${subCategoryList}" itemLabel="name" itemValue="id"/> The name and ids are the fields from the SubCategory object and subCategoryList is List<Subcategory>

0

精彩评论

暂无评论...
验证码 换一张
取 消