在JSF ajax刷新中调用同步服务

时间:2015-12-01 21:10:13

标签: javascript jsf

我正在尝试调用一个返回java脚本的服务,该脚本反过来描述了Google验证码服务。在常规页面刷新中,让我们在页脚中说,脚本正常工作。但我在提交按钮之前需要它。带有提交按钮的表单位于通过JSF ajax调用加载的内容中。因此,在ajax刷新中调用synchronus服务调用不起作用。

该网站描述了一个基于状态的页面,首先列出了可用的表单(xhtml),在单击一个之后,它根据bean中更改的状态在同一个面板组中加载该表单。代码看起来类似于:

<h:form id="cm-content-form" role="form" enctype="multipart/form-data">
      <h:panelGroup id="cm-page">
         <h:panelGroup id="cm-panel">
                     <!-- navigation panel-->
                    <h:panelGroup id="cm-nav"> 
                            <div class="row">
                                <h:commandLink value="Home" action="#{cmNavigationBean.navigateHome()}">
                                    <f:ajax render="cm-page"/>
                                </h:commandLink>
                            </div>
                            <div class="row">
                                <h:commandLink value="Start New Submission" action="#{cmNavigationBean.navigateFormSelect()}">
                                    <f:ajax render="cm-page"/>
                                </h:commandLink>
                            </div>
                            other links
                    </h:panelGroup>
                    <!-- main content panel based on state maintained in managed bean-->
                    <h:panelGroup layout="block" id="cm-content">
                        <c:choose>
                            <c:when test="#{cmNavigationBean.isHomeState()}">
                              <h:panelGroup layout="block" id="cm-content-home">
                                     Welcome to home page.
                                </h:panelGroup>
                            </c:when>
                            <c:when test="#{cmNavigationBean.isFormSelectState()}">
                                <h:panelGroup layout="block" id="cm-content-form-list">
                                    <h3>Please select the form you wish to submit.</h3>
                                    <hr/>
                                    <c:forEach var="form" items="#{cmNavigationBean.getAllActiveForms()}">
                                        <h:outputText value="#{form.agency.name} - "/><h:commandLink action="#{cmNavigationBean.navigateForm(form.id)}" value="#{form.name}">
                                            <f:ajax render="cm-content"/>
                                        </h:commandLink>
                                        <br/>
                                    </c:forEach>
                                </h:panelGroup>
                            </c:when>
                            <c:when test="#{cmNavigationBean.isFormSubmitState()}">
                                <h:panelGroup id="cm-content-form-submit">  
                                    <c:if test="#{cmFormBean.formsEnabled()}">  
                                        <!-- pasting form here -->
                                        <ui:include src="#{cmFormBean.getCurrentFormURL()}"/>                                         

                                        <!-- captcha goes here -->  
                                        <script type="text/javascript" src="https://oursite.org/captchaservice/generate.htm?userName=aUser">
                                        </script>


                                        <!-- custom control with submit button goes here -->
                                        <div class="row">
                                            <cmi:confirmationPanel
                                                    confirmationPanelTarget="cm-content"
                                                    confirmationPanelText="Please fill out the form above."
                                                    confirmationPanelAcceptButton="Submit"
                                                    confirmationPanelAcceptText="Are you sure you want to submit this form?"
                                                    confirmationPanelAcceptAction="navigateFormSubmit"
                                                    confirmationPanelRejectButton="Cancel"
                                                    confirmationPanelRejectText="Are you sure you want to discard this form?"
                                                    confirmationPanelRejectAction="navigateHome"/>
                                        </div>
                                    </c:if>
                                </h:panelGroup>
                            </c:when>

                            </form>

...

示例中的java脚本在常规页面中工作并显示google capthca服务面板。

<script src="https://oursite.org/captchaservice/generate.htm?userName=aUser">
                                        </script>

但是当我把它放在面板组中时,它会显示错误:

主线程上的同步XMLHttpRequest因其对最终用户体验的不利影响而被弃用。如需更多帮助,请查看http://xhr.spec.whatwg.org/。&#34;

但是,当我在浏览器中刷新页面时,它会显示出来。

  1. 我试图通过使用oncomplete =&#34; javascript:location.reload(true)&#34;来强制从html页面刷新,但是没有用。

  2. 我试图把它放在自定义控件中并尝试在ajax刷新期间包含,显然它也在做同样的事情。

  3. 我尝试在onLoad期间加载脚本,并尝试将返回的数据与<div>标记相关联,但是获取未捕获的异常。

    (()的函数 $(document).ready(function(){         $ .get(&#34; https://oursite.org/captchaservice/generate.htm&#34;,{userName:&#39; aUser&#39;},function(data,status){             captcha = data;         });

  4. 然后在刷新期间调用此函数

    getCaptcha = function () {
        alert(captcha);
        $('#captcha').html(captcha);
    }
    

    Althoguh我在警告对话框中看到了内容,但后面跟着一个空页面。

    应该有一个简单的解决方案,我不知道。你们中的任何人都能指出我的方向吗?非常感谢。

0 个答案:

没有答案