最近遇到了一个问题就是在JSF页面中嵌入html页面,这个html页面中很多功能是使用js动态生成的,现在需要在js函数里想去调用JSF中action类method()方法并动态传送数据给后台进行处理。找了很多jsf组件资料,发现 a4j:jsFuction 进行动态传值很方便很快捷,不用写 actionListener 监听器去监听传值给bean方法。

  a4j:jsFuction的有趣在于,它提供了一个客户端request前,和request后的js功能的截取添加。为了理解这个概念。首先,把a4j:jsFuction看作一个js fuction.名字由name属性来定义。如果我们给这个js fuction添加参数的话,可以在a4j:jsFuction里面加上 f:param作为一个函数参数。a4j:jsFuction主要是加了个js的功能外壳。(必须注意的是,它必须在一个form里)。我们可以通过oncomplete这个属性,来使用从server端来的返回值作为任意js函数的参数,并调用这个js函数。如果页面有需要update的控件的话,还可以用reRender属性来重新render一下各别需要更新的页面控件。

  在xhtml页面Button按钮调取嵌入h5页面如下:

<a4j:commandButton value="播放" styleClass="formBox_commonButton" reRender="videoReportModelPanel"
action="#{action.getVideoFileName(item.id)}" onclick="initPlayer();"
oncomplete="Richfaces.showModalPanel('videoReportModelPanel');"/>

  JS进行处理:

function initPlayer(){
.......
//初始化页面
.......
}
......
//页面特殊功能调用
function putJsFuction(data1,data2){
var base64Str = data1;
var vedioId = data2;
transparm(vedioId,base64Str);
}

  JS处理完业务逻辑后,要把处理的结果传到<a4j:jsFunction>当中。

  注:transparm 对应 a4j:jsFunction 中 name 属性,俩个参数对应 f:param 中 name 属性。传多少个参数可以自己定义。

  嵌入页面需要的JSF代码:

<h:form id ="jsFunctionForm">
<a4j:jsFunction name="transparm" immediate="true" action="#{action.method()}">
<f:param name="vedioId"/>
<f:param name="base64Str"/>
</a4j:jsFunction>
</h:form>

  该 transparm 处发后 jsFunction 会自动调用 action。

  后台接收method()方法:

public void method(){
String vedioId = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("vedioId");
String imgdata = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("imgdata"); //后续逻辑处理 }

  经过上面处理之后就可以把两个参数传到后台 action 当中了,在 method() 当中获取两个参数的方法如上,取到这两个参数你你就可以随意做后台处理了

JSF页面中使用js函数回调后台action方法的更多相关文章

  1. JSF页面中使用js函数回调后台bean方法并获取返回值的方法

    由于primefaces在国内使用的并不是太多,因此,国内对jsf做系统.详细的介绍的资料很少,即使有一些资料,也仅仅是对国外资料的简单翻译或者是仅仅讲表面现象(皮毛而已),它们的语句甚至还是错误的, ...

  2. JSF页面中的JS取得受管bean的数据(受管bean发送数据到页面)

    JSF中引入jsf.js文件之后,可以拦截jsf.ajax.request请求.一直希望有一种方法可以像jquery的ajax一样,能在js中异步取得服务器端发送的数据.无奈标准JSF并没有提供这样的 ...

  3. a标签中执行js函数

    在a标签中调用js函数最适当的方法推荐使用: 1.a href="javascript:void(0);" onclick="js_method()" 这种方法 ...

  4. jquery操作iframe中的js函数

    关键字:jquery操作iframe中的js函数 1.jquery操作iframe中的元素(2种方式) var tha = $(window.frames["core_content&quo ...

  5. JS funtion()中URL不跳转后台action问题

    JS funtion()中URL不跳转后台action问题 今天遇到一个百思不得其解的问题,到现在解决了,但是仍然不知道所以然(估计是因为域名不一致导致的),记录一下 $.get(actionUrl, ...

  6. 【问题】Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数

    [问题]Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数. [解决]直接对变量加引号,如: <button onclick="deleteProduct('@ ...

  7. MVC学习随笔----如何在页面中添加JS和CSS文件

    http://blog.csdn.net/xxjoy_777/article/details/39050011 1.如何在页面中添加Js和CSS文件. 我们只需要在模板页中添加JS和CSS文件,然后子 ...

  8. 在Kotlin中 使用js 函数

    在Kotlin中 使用js 函数 import javax.script.Invocable import javax.script.ScriptEngineManager fun main(args ...

  9. js函数的属性和方法

    js函数的属性和方法 前面的话 函数是javascript中特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本文是深入理解j ...

随机推荐

  1. NSTimer的问题

    iOS开发中,涉及到定时的问题,我们通常使用NSTimer来解决,例如下面的代码. SFClass.h #import <Foundation/Foundation.h> @interfa ...

  2. HTML5-前端开发很火且工资很高?

    前言 晚上逛论坛看到一篇对从事HTML5前端开发的文章写的非常不错,和目前的市场形势差不多,然后我在其基础上给大家进行加工总结一下分享给大家.今天我们谈论的话题是<<为什么从事HTML5前 ...

  3. 博客收藏--sailing的博客

    http://blog.sina.com.cn/sailingxr free:这个博客主页的内容不错 PC的足迹 arm与x86 浅谈PCIe体系架构 浅谈cache memory

  4. 【Java学习笔记之三十四】超详解Java多线程基础

    前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要,下面跟我一起开启本次的学习之旅吧. 正文 线程与进程 1 线程:进程中负责程序执行的 ...

  5. Android+ESP8266+路由器实现远程控制(基于花生壳域名方式访问)

    x先说一下实现的功能,其实就是远程控制 和这篇文章的控制  http://www.cnblogs.com/yangfengwu/p/5295632.html   应该说是这篇文章的升级,解决这篇文章由 ...

  6. Android Studio中的Java控制台中出现乱码问题?

    今天在用Android studio 中敲代码时发现控制台出不了汉字,一打汉字全是乱码的.在此特供解决方案. 在Java的工程目录build.gradle下添加如下代码: 1.新版gradle tas ...

  7. SpringMVC 异常的处理

    Spring MVC处理异常有3种方式: (1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver: (2)实现Spring的异常处理接口Hand ...

  8. ABAP开源项目清单

    因为曾经的“SAP Code Exchange”平台已经于2013年倒闭,现在无论在SCN还是网络上都比较难找到一个地方来关注全部的优秀ABAP开源项目. 本文将这些项目的地址和他们的描述列出,以供参 ...

  9. javascript算法(一)

    1.实现一个函数,运算结果可以满足如下预期结果: add(1)(2) // 3 add(1, 2, 3)(10) // 16 add(1)(2)(3)(4)(5) // 15 实现: function ...

  10. 计数排序(O(n+k)的排序算法,空间换时间)

    计数排序就是利用空间换时间,时间复杂度O(n+k) n是元素个数,k是最大数的个数: 统计每个数比他小的有多少,比如比a[i]小的有x个,那么a[i]应该排在x+1的位置 代码: /* * @Auth ...