Javascript和Java通信

时间:2013-12-09 07:36:10

标签: javascript java parameter-passing oracle-adf

我使用ADF技术构建应用程序,Jdeveloper 11.1.2.3作为IDE。在某些jspx页面的应用程序中,我有<OBJECT>标签,用户可以在其中插入特殊类型的输入(数字签名)。可以通过jspx功能在Javascript页面中访问此标记数据。问题是:如何通过Java类Javascript(非BackingBean)访问Servlet函数(包含数字签名数据)中定义的变量。< /强>

这是<OBJECT>标记以及调用Javascript函数的按钮: 注意:我确信Javascript保存所需的数据(数字签名对象),而不是我拥有的所有功能。

<OBJECT classid="clsid:69A40DA3-4D42-11D0-86B0-0000C025864A" height="75" border="2" id="SigPlus1"  
                    name="SigPlus1" style="HEIGHT: 180px; WIDTH: 320px; LEFT: 0px; TOP: 0px;">  
              <param name="_Version" value="131095"/>  
              <param name="_ExtentX" value="4842"/>  
              <param name="_ExtentY" value="1323"/>  
              <param name="_StockProps" value="0"/>  
            </OBJECT>  

 <INPUT id="submit1" name="Save" type="submit" value="Save" onclick="OnSave()"/>  

我尝试了以下方法,但它无效:

我在页面中添加了隐藏字段,并将hidden input的value属性绑定到java BackingBean中的属性,如下所示:

<input type="hidden" id="passSignToBean" value="${SRdetailsBean.sigObj}"/>  

这是将更改输入字段值的Javascript函数:

function OnSave() {

document.forms[0].SigPlus1.TabletState = 0; //Turns tablet off
document.forms[0].SigPlus1.SigCompressionMode = 2; //Compresses the signature at a 2.5 to 1 ratio, making it smaller...to display the signature again later, you WILL HAVE TO set the SigCompressionMode of the new SigPlus object = 1, also

alert("Test 1");

document.getElementById('passSignToBean').value = document.forms[0].SigPlus1;

alert("Test 2");
}

我的想法是,当用户点击提交按钮时,系统会调用Javascript函数OnSave()并更改hidden input标记的值。因为,我将此输入字段绑定到java BacknigBean中的某个属性(我假设),应更新bean中的属性以匹配hidden input字段的新值。

重要说明: 我没有使用HttpServlet。 我没有使用java applet

当我尝试使用java NullPointerException属性时,我尝试使用此方法时得到BackingBean

1 个答案:

答案 0 :(得分:1)

首先,您不应混用HTML和ADF 如果你需要从javascript调用服务器端方法,你必须排队服务器事件 请查看此文档中的示例: http://jdevadf.oracle.com/adf-richclient-demo/docs/tagdoc/af_serverListener.html

基本上,您生成服务器事件,您在辅助bean中捕获侦听器并将您的变量作为参数传递给此事件。

还有你如何从bean调用javascript方法:

FacesContext fctx = FacesContext.getCurrentInstance();
ExtendedRenderKitService service = Service.getRenderKitService(fctx, extendedRenderKitService.class);
service.addScript(fctx, "<any javascript to be invoked>");