预填充并重新显示HTML表单

时间:2011-10-24 18:04:01

标签: jsp servlets

创建表单的最佳非框架(仅限JSP / Servlet)方式是什么,它可以:

  1. 使用从数据库加载的默认值/数据预填充
  2. 重新显示未通过验证的提交值
  3. 做一个或另一个似乎相当直接,但创建一个同时支持两者的表单是棘手的。

    例如使用

    ${param.scheduledDate}
    

    非常适合在验证失败时重新显示日期,但无法在页面加载时以编程方式轻松设置。相反,

    ${myBean.scheduledDate} 
    

    非常适合显示从数据库加载的值,但由于bean使用的是Date类型的对象而不是字符串,因此无法在验证失败时重新显示数据。

    有些事情浮现在脑海中,但看起来并非如此:

    • 使用只有字符串的中间bean
    • 使用servlet过滤器在页面加载时设置参数

2 个答案:

答案 0 :(得分:3)

在视图方面进行。在EL中使用条件运算符?:

<input name="foo" value="${fn:escapeXml(empty bean.foo ? param.foo : bean.foo)}" />

请注意,我认为与GET不同,POST请求在验证成功之前不会预先填充${bean}

这种冗长是MVC框架存在的原因之一。例如,JSFEditableValueHolder接口完全透明地处理,由UIInput个组件实现。

答案 1 :(得分:0)

将HTTP请求转发回发布表单的同一页面违反了Post-Redirect-Get最佳做法,应避免使用。可以保存用户在会话中提交的内容或使用URL参数来保存用户提交的值并重定向回原始页面,但这不是很优雅。表单提交的最佳解决方案之一是使用AJAX提交表单。