【发布时间】:2011-10-27 15:12:17
【问题描述】:
我正在 Play framework(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()。
【问题讨论】:
标签: java validation playframework flash-scope