【发布时间】:2026-02-17 23:20:08
【问题描述】:
我正在开发一个带有表单的 JSF 应用程序:
<h:inputText value="#{model.firstname}" />
<h:inputText value="#{model.employeeNumber}" converter="javax.faces.Integer"/>
...
这是带有 bean 验证的模型:
@NotNull(message="Please enter a surname")
private String firstname;
@Min(value=1)
@Max(value=2000)
private Integer employeeNumber;
...
//setters and getters
除了页面中显式编码的“后退”按钮转到上一页/表单之外,一切都运行良好。
我希望用户输入的值在他们再次返回上述页面时恢复,无论数据是否有效。例如,如果用户在employeeNumber字段中输入abc,则此字符串无法存储到模型上的Integer。
我了解 JSF 将用户输入的值存储到每个 UIComponent 的“请求值”中。我想恢复的是这些,而不是我的模型,因为上面的表格还没有验证它的数据。
我该怎么做?
(用户点击提交时会进行数据验证)。
【问题讨论】:
-
不就是浏览器的
autocomplete吗?如果您不想要这个,请添加autocomplete="off"。 -
嗨,不,这与我想要的相反。我希望数据重新出现在用户已部分填充并导航离开的页面上,而无需验证该数据,然后返回。好像用户从未离开过,可以继续填写表单然后进行验证。
-
您可以使用表单bean(带有字符串)来存储用户数据并在提交操作时将数据保存到模型中。如果表单 bean 具有会话范围,那么它应该可以按预期工作。
-
这可以很容易地在客户端完成,例如HTML5 local storage。这可以接受吗?如果你真的想在服务器端做,那就有点复杂了。
-
理论上应该可以手动保存组件树,以序列化的形式携带它,然后在以后恢复它。我也许会尝试一下。