我有一个 JSF 文件,需要从我通过 Ajax 调用 Web 服务获得的 JS 函数中获取的数据进行填充。后一部分就像一个魅力。我能够从 ajax 调用中检索 JSON 数据。我需要解析这个 json 数据并获取数据并使用它来填充 JSF。我不确定如何从 JSF/xhtml 访问 JS 变量。
是否有可能以某种方式做到这一点?我正在研究一些 DWR 内容,这些内容会将 ajax post 从 JS 发送到 Java bean,我可以使用 JSF 中的 bean 变量。但是,我想知道是否还有其他方法可以做到这一点。
如果有任何帮助,我将不胜感激。我正在使用 JSF 2.x 顺便说一句。
谢谢,
S.
您可以使用以下“技巧”让 JS 向 JSF 提交信息。
使用 <f:ajax>
创建一个不可见的 JSF 表单钩子(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更新输入框并触发change事件:
<script>
function somefunction() {
var input = document.getElementById('input');
input.value = 'your JSON string';
input.onchange();
}
</script>
在 listener
中执行 Java/JSF 工作方法:
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>
也就是说,我更愿意在托管 bean 的构造函数或操作方法中而不是在 JS 中执行 web 服务调用。您的方法实际上是一种迂回。