使用p:remoteCommand来达到复杂的异步刷新取值
大家请注意,这个方法可以真正的解决在jsf中通过js调用后台bean方法并获取bean方法返回值的问题。
同样,首先我们要写两个jsf组件,来和后台bean结合
<h:inputHidden id=“input1” value="#{advancedQueryManager.vals}"></h:inputHidden>
<h:form>
<p:remoteCommand name=“processSelection”
action="#{advancedQueryManager.testReturn}" update=":input1"
oncomplete=“processResult();” />
</h:form>
解释一下,上面的的这个inputHidden的作用是接收后台bean处理后的返回值。remoteCommand的作用是将js中的动态的值传递到后台bean方法。
function processResult() {
//接收后台bean方法中传递过来的处理结果,接收方法是获取inputHidden中的值,并可根据自己的业务继续处理
alert($(’#input1’).val());
}
function makeSelection() {
//普通的html组件调用这个js
//将想要传递到后台的动态值封装成json格式的值,传给p:remoteCommand,然后由这个组件传给bean方法
processSelection([ {name : ‘setVal’,value : ‘getIt’} ]);
}
最后是后台bean方法代码:
public void testReturn() {
String selectedValue = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(“setVal”);
System.out.println("------>"+selectedValue);
//拦截到这个页面传过来的值后可以进行你自己的业务处理
//并将处理结果返回给vals,这个vals是这个bean中的一个属性
vals = “getResult”;
}
至此,jsf中使用js函数将普通的html组件的值动态的传递到后台bean方法并接受后台处理结果已经成功得到解决。