1

ヘルパーを使用せずに作成したい<select>(selectヘルパーが大量のhtmlを生成しているため)

だから、私はコントローラーから次のような都市のリストを取得します:

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 に答える