JavaScript 和 Java 通信

标签 javascript java parameter-passing oracle-adf

我正在使用 ADF 构建应用程序技术 Jdeveloper 11.1.2.3在旁边。在一些应用中jspx我的页面 <OBJECT>用户可以在其中插入特殊类型的输入(数字签名)的标签。此标签数据可在 jspx 中访问。翻页Javascript功能。问题是:如何访问 Javascript 中定义的变量通过Java类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()"/>  

我尝试了以下方法,但它不起作用:

我在页面中添加了一个隐藏字段,例如并绑定(bind) 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 的值标签。因为,我将此输入字段绑定(bind)到 java BacknigBean 中的某个属性。 (我假设)bean 中的属性应该更新以匹配 hidden input 的新值已提交。

重要提示: 我没有使用HttpServlet 。 我没有使用java applet .

当我尝试这种方法时,我得到了 NullPointerException当我尝试使用 java BackingBean 时属性。

最佳答案

首先,您不应该混合使用 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>");

关于JavaScript 和 Java 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20465426/

相关文章:

javascript - 通过 Jquery 添加和删除边框

javascript - 将数组对象转换为所需格式的对象数组

javascript - 如何将 HTML5 地理位置数据保存到 python Django admin?

Java 多重正则表达式验证

Java:使用图像作为按钮

javascript - 如何在 Mirage js 中为具有多态一对一关系的模型提供种子?

java - 找不到错误 : resource style/Animation. AppCompat.Dialog(又名 com.example.myapplication :style/Animation. AppCompat.Dialog)

postgresql - 合并多个结果表并对结果进行最终查询

ssis - ssis 中的参数绑定(bind)

vba - Workbooks.OpenText 不采用 'fieldinfo' 参数