Возврат к последнему выбранному элементу в h: selectOneMenu component [duplicate]

Используйте функцию callback() внутри успеха foo(). Попробуйте таким образом. Это просто и легко понять. & nbsp;

var lat = "";
var lon = "";
function callback(data) {
    lat = data.lat;
    lon = data.lon;
}
function getLoc() {
    var url = "http://ip-api.com/json"
    $.getJSON(url, function(data) {
        callback(data);
    });
}

getLoc();
6
задан BalusC 3 October 2013 в 15:02
поделиться

1 ответ

Вам просто нужно реализовать интерфейс Validator .

@FacesValidator("myValidator")
public class MyValidator implements Validator {

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

        if (valueIsInvalid) {
            throw new ValidatorException(new FacesMessage("Value is invalid!"));
        }
    }

}

@FacesValidator зарегистрирует его в JSF с идентификатором проверки подлинности myValidator, чтобы вы могли ссылаться на него в атрибуте validator для любого компонента <h:inputXxx> / <h:selectXxx> следующим образом:

<h:inputText id="foo" value="#{bean.foo}" validator="myValidator" />
<h:message for="foo" />

Вы также можете использовать <f:validator>, что было бы единственным если вы намерены присоединить несколько валидаторов к одному и тому же компоненту:

<h:inputText id="foo" value="#{bean.foo}">
    <f:validator validatorId="myValidator" />
</h:inputText>
<h:message for="foo" />

Всякий раз, когда валидатор выдает ValidatorException, его сообщение будет отображаться в поле <h:message>, связанное с полем ввода.

Вы можете использовать <f:validator binding> для ссылки на конкретный экземпляр валидатора где-то в области EL, который, в свою очередь, может быть легко предоставлен в виде лямбда:

<h:inputText id="foo" value="#{bean.foo}">
    <f:validator binding="#{bean.validator}" />
</h:inputText>
<h:message for="foo" />

public Validator getValidator() {
    return (context, component, value) -> {
        // ...

        if (valueIsInvalid) {
            throw new ValidatorException(new FacesMessage("Value is invalid!"));
        }
    };
}

Чтобы получить еще один шаг, вы можете использовать проверку компонентов JSR303. Это проверяет поля на основе аннотаций. Поскольку это будет целая история, вот только некоторые ссылки для начала:

<f:validateBean> полезна только в том случае, если вы намерены отключить проверку компонентов JSR303. Затем вы помещаете входные компоненты (или даже всю форму) внутри <f:validateBean disabled="true">.

См. Также:

13
ответ дан BalusC 5 September 2018 в 10:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: