我正在验证 Play 框架(java)中的表单,它在提交后将逗号添加到我的表单值中。
这是表格:
#{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() 之后存储在 flash 中的值,如 System.out.println(flash) 所示,显示逗号。当我手动将值添加到闪存时,逗号永远不会出现。
for (Map.Entry<String, String> entry : temp.entrySet())
{
flash.put(entry.getKey(), entry.getValue());
}
这个 hack 解决了我的问题,但我仍然想知道为什么我不能只使用 params.flash()。