我在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()。