从JSF访问Javascript变量

reg*_*nzy 4 javascript ajax jsf json javabeans

我有一个JSF文件,需要从我从JS函数获得的数据填充,我从Ajax调用到Web服务.后一部分就像一个魅力.我能够从ajax调用中检索JSON数据.我需要解析这个json数据并获取数据并使用它来填充JSF.我不确定如何从JSF/xhtml访问JS变量.

有可能在某种程度上这样做吗?我正在经历一些DWR的东西,它们会将JS发送给Java bean的ajax帖子,我可以使用JSF中的bean变量.但是,我想知道是否还有其他方法可以做到这一点.

我非常感谢任何帮助.我正在使用JSF 2.x顺便说一句.

谢谢,S.

Bal*_*usC 6

您可以使用以下"hack"来让JS向JSF提交信息.

使用<f:ajax>hook 创建一个不可见的JSF表单:

<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>
Run Code Online (Sandbox Code Playgroud)

让JS更新输入字段并触发change事件:

<script>
    function somefunction() {
        var input = document.getElementById('input');
        input.value = 'your JSON string';
        input.onchange();
    }
</script>
Run Code Online (Sandbox Code Playgroud)

listener方法中执行Java/JSF作业:

private String input; // +getter +setter

public void process(AjaxBehaviourEvent event) {
    doSomethingWith(input);
}
Run Code Online (Sandbox Code Playgroud)

将所需的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>
Run Code Online (Sandbox Code Playgroud)

也就是说,我更喜欢在托管bean的构造函数或操作方法中而不是在JS中进行webservice调用.你的方法实际上是一个回旋处.