如何清除Validator类中的输入字段?

J4mes先生

在我的应用程序中,我具有以下内容Validator来验证验证码输入:

@Named(value = "simpleCaptchaValidator")
@RequestScoped
public class SimpleCaptchaValidator implements Validator {

    @Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
        HttpSession session       = (HttpSession) context.getExternalContext().getSession(false);
        Captcha     secretCaptcha = (Captcha) session.getAttribute(Captcha.NAME);

        // Clear the input field
        EditableValueHolder input = (EditableValueHolder) component;
        input.resetValue();

        // Display an error msg if the entered words are wrong
        if (!secretCaptcha.isCorrect(value.toString())) {
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Failed!", "You have entered wrong words.");
            throw new ValidatorException(msg);
        }
    }
}

Validator当用户输入错误的验证码单词时,以上内容对非Ajax请求非常有用。但是,如果用户输入了正确的验证码单词,但在其他组件上验证失败,则不会清除验证码的输入字段。

如果您能告诉我如何解决上述问题,我将不胜感激。

BalusC

它不起作用,因为EditableValueHolder#resetValue()在错误的时刻调用了。您应该在调用应用程序阶段(至少在更新模型值阶段之后)而不是在验证阶段进行调用。也就是说,当validate()方法无例外地返回,JSF仍将已验证的值设置为组件的本地值。一般而言,当验证阶段失败时,将不会调用更新模型值阶段,并且局部值仍然停留在组件中。

根据到目前为止提供的信息,不可能提出正确的方法。如果这是一个自定义组件,则不要在中写入值encode()或者,如果这是现有组件,那么最好的选择是创建一个自定义转换器,该转换器将提交的值存储为自定义组件属性,然后null在中返回getAsObject()然后,在验证器中,只需获取该自定义组件属性作为值即可。万不得已时,请附上一个PhaseListener可在适当时机重置组件的按钮。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何清除AngularJS中的输入字段

来自分类Dev

如何清除jQuery中的特定输入字段

来自分类Dev

如何清除Angular中过滤的输入字段?

来自分类Dev

如何清除AngularJS中的输入字段

来自分类Dev

如何清除TextInputDialog的输入字段?

来自分类Dev

如何清除Draft-js中的输入字段

来自分类Dev

如何清除JPanel中的所有输入字段

来自分类Dev

选择预输入后如何清除字段?

来自分类Dev

如何使用jQuery清除输入字段值?

来自分类Dev

如何清除图像的单击输入字段?

来自分类Dev

如何清除Bootstrap DateRangePicker字段的输入

来自分类Dev

React TypeScript:如何清除输入字段

来自分类Dev

清除Bootstrap中的表单输入字段?

来自分类Dev

清除Angular表单提交中的输入字段?

来自分类Dev

从页脚中清除Kendo Datepicker输入字段

来自分类Dev

清除字段并在DalekJS中输入

来自分类Dev

清除嵌套指令中的无效输入字段

来自分类Dev

如何在其他文本字段中输入值时清除文本字段

来自分类Dev

如何清除bash中的输入

来自分类Dev

如何从文件输入中读取识别类和字段?

来自分类Dev

清除预先输入字段

来自分类Dev

CasperJS清除输入字段

来自分类Dev

输入字段不会清除

来自分类Dev

单击数据关闭按钮时,如何清除引导程序模式中的所有输入字段?

来自分类Dev

如何在不使用状态的情况下清除功能组件中输入字段的值?

来自分类Dev

Laravel + Vue Js中输入字段为空时如何清除自动完成结果?

来自分类Dev

如何在javascript或jquery中清除表单字段(输入,文本区域,选择和单选)

来自分类Dev

如何清除MongoDB中的敏感字段?

来自分类Dev

如何清除Silverstripe CMS中的表单输入

Related 相关文章

热门标签

归档