我正在创建一个计算器,用户可以通过单击虚拟小键盘来执行各种操作.现在我想限制用户只通过点击按钮选择各种字符,他/她不应该使用键盘输入值.我尝试使用readonly="true"但是当我们点击任何按钮时它既不验证输入也不设置bean中的值.
我们在jsf中有这样的限制吗?
Bal*_*usC 17
这就是JSF防范篡改/攻击请求的效果,其中黑客试图通过操纵HTML DOM和/或HTTP请求来规避readonly(和disabled)属性.
代替
<x:inputXxx ... readonly="true">
Run Code Online (Sandbox Code Playgroud)
使用
<x:inputXxx ... readonly="#{facesContext.currentPhaseId.ordinal eq 6}">
Run Code Online (Sandbox Code Playgroud)
要么
<x:inputXxx ... readonly="#{not facesContext.postback or facesContext.renderResponse}">
Run Code Online (Sandbox Code Playgroud)
这确保了readonly仅在渲染响应阶段有效,而不是在所有其他JSF阶段.因此,当JSF即将在应用请求值阶段解码输入组件时,它将考虑readonly="false"这种方式.