强制JSF无论如何都要处理,验证和更新只读/禁用的输入组件

why*_*ake 10 validation jsf

我正在创建一个计算器,用户可以通过单击虚拟小键盘来执行各种操作.现在我想限制用户只通过点击按钮选择各种字符,他/她不应该使用键盘输入值.我尝试使用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"这种方式.

也可以看看: