Вы можете использовать следующий хак, чтобы JS отправил информацию в JSF.
Создайте невидимую форму JSF с <f:ajax>
hook:
<h:form prependId="false" style="display:none;">
<h:inputText id="input" value="#{bean.input}">
<f:ajax event="change" execute="@form" listener="#{bean.process}" render=":something" />
</h:inputText>
</h:form>
Позвольте JS обновить поле ввода и вызвать событие изменения:
<script>
function somefunction() {
var input = document.getElementById('input');
input.value = 'your JSON string';
input.onchange();
}
</script>
Выполните задание Java / JSF в методе listener
:
private String input; // +getter +setter
public void process(AjaxBehaviourEvent event) {
doSomethingWith(input);
}
Поместите нужную разметку JSF в <h:someComponent id="something">
, который будет перерисован <f:ajax render=":something">
, когда listener
выполнит свою работу:
<h:panelGroup id="something">
The JSON string was: <h:outputText value="${bean.input}" />
</h:panelGroup>
Тем не менее, я бы предпочел выполнять вызов веб-службы в конструкторе или методе действия управляемого компонента, а не в JS. Ваш подход буквально окольный.