我通过JSF做了一个页面,用户可以在表单中输入一些值。如果用户对输入很满意,他可以单击提交按钮,用新值更新模型。
我试图实现的是:我希望每次用户在输入字段中输入一个符号时都能触发输入的验证。但此时,应NOT更新模型。只有当用户单击提交按钮时,才应更新模型。我希望这种行为能带来更好的用户体验。用户应该能够按下浏览器中的后退按钮,并且他的更改不会附加到模型中。我还希望用户在输入时看到,如果他输入了一些废话。
目前我的JSF文件如下:
<h:inputText
required="true"
requiredMessage="Please enter a value."
id="input_value" value="#{myBean.myValue}"
styleClass="input"
validatorMessage="Please enter a value." >
<f:ajax
event="keyup"
execute="input_value"
render="input_value"/>
</h:inputText>
每当用户在输入字段中输入一个符号时,就会触发验证。但它也更新了模型。这不是我想要的。
这是不可能的。至少在JSF impl中没有黑客攻击。
幸运的是,你提到了XY问题的X,所以这个问题可以得到合理的回答:
我希望这种行为能带来更好的用户体验。用户应该能够按下浏览器中的后退按钮,并且他的更改不会附加到型号
要解决这个问题,只需指示浏览器永远不要缓存动态页面。细节可以在这个问答中找到;A: 避免JSF web应用程序上的后退按钮。您还需要确保为它所保存的数据选择了正确的bean作用域。也就是说,不要将视图范围的数据放在会话范围的bean中。这些表单bean最多只能在视图范围内。另请参阅如何选择正确的bean作用域?