1

我想在<select>不使用助手的情况下创建一个(因为选择助手会生成很多html)

因此,我从 Controller 中获得了一个城市列表,例如:

public static List<City> getAllSortedByNameAsc() {
    List<City> cities = new ArrayList<City>();
    cities.addAll(City.find.orderBy("name").findList());
    return cities;
}

在我的模板中,我使用以下代码创建选项:

@cities.map { city =>
    <option value="@city.id">@city.name</option>
}

哪个有效,但我也希望将所选城市作为所选值。我尝试了几件这样的事情:

@cities.map { city =>
    <option value="@city.id" selected="@if(offerForm("city.id").value == city.id){selected}">@city.name</option>
}

但这不起作用。谁能给我一个提示?

4

2 回答 2

1

配置文件:application.conf

db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play"
ebean.default="models.*"

控制器类 => Application.java

package controllers;

import play.*;
import play.mvc.*;
import models.City;
import play.data.Form;
import views.html.*;

public class Application extends Controller {

  final static Form<City> cityForm = form(City.class);

  public static Result index() {
    City pune=new City();
    pune.name="pune";
    pune.save();

    City mumbai=new City();
    mumbai.name="mumbai";
    mumbai.save();

    City city=City.get(2L);

    return ok(index.render(cityForm.fill(city),City.all()));
  }

}

模型类 => City.java:

package models;

import javax.persistence.Entity;
import javax.persistence.Id;
import play.db.ebean.Model;
import java.util.List;
import com.avaje.ebean.validation.NotNull;

@Entity
public class City extends Model{

    @Id
    public Long id;

    @NotNull
    public String name;

    public static Finder<Long, City> find = new Finder(Long.class, City.class);

    public static City get(Long id){
        return find.byId(id);
    }

    public static List<City> all() {
        return find.all();
    }

}

模板文件 => index.scala.html

@(cityForm: Form[City],cities: List[City])

<!DOCTYPE html>
<html>
    <head><title></title></head>

    <body>
        <div>
            <select>
                @for(city <- cities){
                    <option value="@city.id" @{if(city.id.toString().equals(cityForm("id").value)) "selected='selected'"}/>@city.name</option>
                }
            </select>
        </div>
    </body>
</html>
于 2012-07-04T16:07:45.873 回答
0

我对类型映射的工作方式并不肯定,但我会尝试

@cities.map { city =>
    <option value="@city.id" selected="@if(offerForm("city.id").value.equals(city.id)){selected}">@city.name</option>
}

而不是使用==运算符。

您还应该考虑帮助器是否有充分的理由生成所有 HTML。它通常是一个非常智能的框架。

于 2012-07-03T01:08:57.910 回答