繁体   English   中英

带输入参数的jsf-validator

[英]jsf- validator with parameters from input

这是我的.xhtml页面的一部分:

<h:inputText id="kartNumIn"  value="#{controller.mitarbeiter.kartenNummer}">
                <f:attribute name="foo" value="controller.mitarbeiter.id" />
                <f:validator validatorId="kartVal" binding="#{kartVal}" disabled="#{!controller.noUpdate}"/>
            </h:inputText>

这里我的validate-method():

@Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {

        int id=(Integer) component.getAttributes().get("foo"); //always 0
        int temp = (Integer) value;

        if (!(value instanceof Integer)) {
            throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Eingabefehler", "FEHLER:Bitte geben Sie eine Zahl ein!"));
        }

       System.out.print("Input"+value+"Aktuelle"+component.getAttributes().get("foo").toString());

        if (getAlleKartennummern().contains(temp) && temp!=id) {
            throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Kartennummerfehler", "FEHLER:Kartennumer bereits vergeben!"));
        }
    }

对于我的验证器,我需要第二个值。 在这里,我需要mitarbeiter.id 对于component.getAttributes().get("foo")我总是为null ....

在属性中,您需要设置表达式的值

<f:attribute name="foo" value="controller.mitarbeiter.id" />

它应该是

<f:attribute name="foo" value="#{controller.mitarbeiter.id}" />

我认为OP不再对这个问题感兴趣了,但是如果其他人发现了这个问题:

int id=(Integer) component.getAttributes().get("foo");

当你得到一个字符串时将无法工作。 你写的有点奇怪,你总是得到null。 你应该得到一个:

java.lang.String cannot be cast to java.lang.Integer

如果是这种情况,请尝试:

int id = Integer.parseInt((String) component.getAttributes().get("foo"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM