【问题标题】:Javascript and Java CommunicationJavascript 和 Java 通信
【发布时间】:2013-12-26 06:08:00
【问题描述】:

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

这是<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 BackingBean 属性时,我得到了NullPointerException

【问题讨论】:

    标签: javascript java parameter-passing oracle-adf


    【解决方案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>");
    

    【讨论】:

    • 非常感谢 Nagh,这正是我所需要的。但是,我怎样才能做到这一点;也就是说,我怎样才能将数据从 Java 方法传递到 Javascript 函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 2011-02-13
    • 2012-08-02
    • 2011-04-14
    • 1970-01-01
    • 2016-02-12
    相关资源
    最近更新 更多