2012-07-01 53 views
1

我想不使用助手(因爲選擇助手正在產生大量的HTML代碼的發揮2.0模板HTML與if語句在地圖上選擇

所以創建一個<select>,我得到一個城市列表從像控制器:

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

但這並不奏效。任何人都可以給我一個提示嗎?

+0

看看原來的幫手,也許它會幫助你:https://github.com/playframework/Play20/blob/master/ framework/src/play/src/main/scala/views/helper/select.scala.html –

+0

@ cities.map {city => } – jittakal

+0

'at'jittakal:對不起,不行! 「非法啓動簡單表達式」 - > http://i50.tinypic.com/2wbsqvk.png 和@nico_ekito:在鏈接中使用的解決方案不起作用,但沒有編譯錯誤。我寫道:「@(if(offerForm(」city.id「)。value == city.id)」selected「else」testELSE「)」 因此,這正是鏈接中的代碼,但是在所有三個選項(在我的例子中)做了其他部分。 但offerForm(「city.id」)。值是正確的(在我的示例2中),city.id是1,2和3: - 該死的。還有什麼建議?非常感謝!不幸的是, – grailsInvas0r

回答

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

jittakal:噢,天哪感謝你的工作!太棒了!它的工作原理! 所以我回顧一下,我們需要這個「toString()」,這是問題! 你做了一個@ for-loop,但我再次嘗試了「map-loop 「它也可以。 太棒了!再次感謝您! – grailsInvas0r

0

我不看好類型映射是如何工作的,但我會嘗試

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

,而不是使用==操作。

您還應該考慮助手是否有充分的理由來生成所有的HTML。它通常是一個非常漂亮的框架。

+0

沒辦法!你可以選擇「