您可以使用以下'hack'让JS将信息提交给JSF。
创建<f:ajax>
钩一种无形的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>
让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的构造函数或操作方法的Web服务调用而不是在JS中。你的方法实际上是一个迂回。
JSF 1.x or 2.x?在2.x中,这当然是可行的。顺便说一句:你从来没有回应,在这里以及.. .. http://stackoverflow.com/questions/5507823/updating-a-list-of-items-on-calling-setpropertyactionlistener-in-jsf这是非常重要的提及JSF spec版本,因为JSF 2.x提供了内置的ajax功能,答案很大程度上取决于此。发布JSF 2.x的答案完全是浪费时间,你毕竟使用旧的1.x. – BalusC 2011-05-13 21:56:05
我很抱歉没有具体。这是JSF 2.x – 2011-05-13 22:21:54