2011-10-27 51 views
2

我在Play框架(java)中驗證表單,並且它在提交後向我的表單值添加逗號。Play框架Flash變量添加逗號來形成數據

這裏的形式:

#{form @doCreate()} 
    <input type="text" name="session.sessionName" value="${flash['session.sessionName']}"/> 
    <input type="text" name="session.jumpDate"value="${flash['session.jumpDate']}"/> 
    <select id="jumpers" multiple="multiple" name="jumpers[]" title="Click to Select a Jumper"> 
     ..several options here 
    </select> 
#{/form} 

這裏的表單處理程序:

public static void doCreate(JumpSession session, String[] jumpers) { 

    validation.required(session.getSessionName()).message("sessionName.required"); 
    validation.required(session.getJumpDate()).message("jumpDate.required"); 
    validation.required(jumpers).message("jumpers.required"); 


    if (validation.hasErrors()) { 
     params.flash(); // add http parameters to the flash scope 
     validation.keep(); // keep the errors for the next request 
     create(); 
    } 

    render(); 
} 

的方法create()呈現剛顯示相同的形式:

public static void create() { 
    boolean isAuthorized = Security.isConnected(); 
    // Get the user details 
    String userid = Security.connected(); 

    render(isAuthorized, userid); 
} 

驗證所有作品除了每個字段中的值都有一個','字符添加到結尾經過驗證。如果我提交一個完全空白的表單,它將在每個字段中以逗號(',')字符返回。如果我只在一個字段中輸入一個值,那麼該值會在最後粘貼一個逗號。更重要的是,如果我再次提交,每個逗號之前還有2個逗號!

編輯: 我也試過用${flash['session.jumpTime']?:""}來確保變量是實際定義的。編輯: 它發生在params.flash()方法中。 System.out.println(params.allSimple())顯示沒有逗號,但是在params.flash()之後的閃存中存儲的值(由System.out.println(flash)顯示)顯示逗號。當我手動將值添加到閃存時,逗號從不出現。

for (Map.Entry<String, String> entry : temp.entrySet()) 
     { 
      flash.put(entry.getKey(), entry.getValue()); 
     } 

這個技巧可以解決我的問題,但我還是想知道爲什麼我不能只用params.flash()。

回答

1

我發現了這個問題,畢竟它與Play無關。我使用的一個JavaScript庫(jQuery工具)是在我不知道的情況下克隆頁面上的元素,從而創建雙重表單提交。由於每個表單元素都加倍了,所以值之間用逗號分隔。這在params變量中是無法檢測的,因爲它只在.flash()方法中插入了逗號。

Pshaw。