вот что я пытаюсь сделать.
Моя страница ADF встроена в веб-страницу, и я должен установить некоторые значения в родительском окне.
Для этого у меня естьфункция JavaScript, которая прекрасно работает.чтобы получить значение, которое мне нужно выдвинуть, я должен вызвать внешний API с некоторым параметром, который зависит от клика пользователя.
Я реализую вызов в своем компоненте управления, получаю значение и помещаю его вполе ввода на моей странице.
Я также установил clientListener (valueChange) в поле ввода для вызова моей функции javascript.
Теоретически это должно работать просто отлично.
проблема в том, что после того, как пользователь вызвал мое событие serverListener, которое вызывает API, clientListener не вызывается, когда значение помещается в поле ввода.
Я позволил поле видимым для тестированияи я могу сам ввести значение, и оно сработает, но когда бин толкает значение в поле, событие valueChange не получает триггер.
Оттуда возникает вопрос как мне получить событие длятриггер после того, как компонент извлек значение, или как я могу вызвать функцию javascript непосредственно из компонента?
Вот пример кода, который я использую
<af:resource type="javascript">
function pushValue(evt){
// push values to parent page
window.external.main.setFieldValue("fieldName", evt.getSource().getValue());
}
function callServerAPI(){
// call the serverListener
AdfCustomEvent.queue(it2, "callAPI", {somevalues}, true);
}
</af:resource>
<af:inputText label="My hidden field"
id="it2"
binding="#{pageFlowScope.MyAppBean.hiddenField}"
clientComponent="true">
<af:clientListener method="pushValue" type="valueChange"/>
<af:serverListener type="callAPI"
method="#{pageFlowScope.MyAppBean.callAPI}"/>
</af:inputText>
Вот образец для боба
private RichInputText hiddenField;
public void callAPI(ClientEvent clientEvent) throws Exception {
String fieldValue = clientEvent.getParameters().get("somevalues").toString();
try {
// call the API and get the value needed in the hidden field
hiddenField.setValue(fetchValue(fieldValue));
} catch (Exception e) {
e.printStackTrace();
}
// refresh field
AdfFacesContext.getCurrentInstance().addPartialTarget(hiddenField);
}
Заранее спасибо за помощь!