首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将自定义jsf-validators绑定到以编程方式创建的HTML元素?

如何将自定义jsf-validators绑定到以编程方式创建的HTML元素?
EN

Stack Overflow用户
提问于 2013-04-03 21:11:49
回答 1查看 910关注 0票数 2

我正在使用JSF2.0,并希望将我的自定义RangeValidator附加到HtmlInputText。在我的backing中,有一个创建HTMLInputText的代码片段。如果我添加一个默认的验证器,我的代码就会像预期的那样工作。如果我以相同的方式添加我的自定义RangeValidator (通过使用FacesContext...)有一个错误即将出现,更准确地说是一个‘未知id’错误。如果我使用new关键字创建一个实例,似乎我不能使用我的访问器方法,更准确地说,我的HtmlInputText将在运行时使用一个新创建的RangeValidator实例,所以属性值是minimum =0和maximum = 0,我的验证器是无用的。如何让我的自定义验证器工作?提前谢谢。

代码语言:javascript
复制
// Snippet which creates HTML-Components
if ((integerField.getMaximalValue() != null) && (integerField.getMinimalValue() != null)) { // serverside validation required
    // Default JSF Validator - works!
    // final LongRangeValidator validator = (LongRangeValidator) FacesContext.getCurrentInstance().getApplication().createValidator(LongRangeValidator.VALIDATOR_ID);
    // CustomValidator - ERROR: Unknown validator id; 
    final RangeValidator validator = (RangeValidator) FacesContext.getCurrentInstance().getApplication().createValidator("mypackage.validators.RangeValidator");
    // construct custom validator instance - not working, seems to be a different instance!
    // RangeValidator validator = new RangeValidator();
    validator.setMaximum(integerField.getMaximalValue());
    validator.setMinimum(integerField.getMinimalValue());    
    inputInteger.addValidator(validator);
}

// Validator
@FacesValidator("RangeValidator")
public class RangeValidator implements Validator {
    private int minimum;
    private int maximum;
    @Override
    public void validate(FacesContext context, UIComponent uiComponent, Object value) throws ValidatorException {
        //System.out.println("RangeValidator.validate: " + value);
        int val = Integer.parseInt((String) value);
        if ((val <= this.getMaximum()) && (val >= this.getMinimum())){
            // ok
        } else {
            FacesMessage fm = new FacesMessage();
            String message = "Das Feld " + uiComponent.getClientId() + " liefert Validierungsfehler!";
            fm.setSeverity(FacesMessage.SEVERITY_ERROR);
            fm.setSummary(message);
            fm.setDetail(message);
            throw new ValidatorException(fm); 
        }
    }
    // Accessors
    ...
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-28 17:58:50

我为这个问题找到了一个解决方案: RangeValidator也需要实现Serializable接口,一切都会像预期的那样工作;

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15788307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档