更新使用“提交”按钮取消的某些页面xhr时发生错误

时间:2013-06-17 19:29:45

标签: xpages

在使用提交按钮和IE的xpages中似乎存在某种问题。所以我必须按如下方式设置提交按钮。

<xp:button value="Submit" id="button2" type="submit">
        <xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="panelErrMsg" immediate="false" save="true">

当我这样做时,我发现“在更新某些页面xhr取消时发生了错误”,然后按Enter键或单击按钮。只要按钮不是类型提交它就可以正常工作但当然我需要点击按钮,我想选择按回车。

提交按钮是表单上的唯一按钮。

更新:以下是演示此问题的完整示例:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">Unique Number:&#160;

    <xp:text escape="true" id="computedField1" value="#{javascript:@Unique();}"></xp:text>
    <xp:br></xp:br>
<xp:button id="button1" value="Update" type="submit">
    <xp:eventHandler event="onclick" submit="true"
        refreshMode="partial" refreshId="computedField1">
    </xp:eventHandler>
</xp:button>

2 个答案:

答案 0 :(得分:3)

由于sumbit按钮和部分刷新的组合而发生错误。

部分刷新是异步处理的,这意味着部分刷新(xhr调用)被发送到服务器,然后让浏览器继续“他的工作”。现在提交表单而不是等待响应,xhr调用被取消。 取消xhr呼叫会弹出警报。

有两种解决方法:

  1. 执行同步调用,而不是执行异步xhr调用。
  2. 覆盖部分刷新的错误方法

    <xp:eventHandler event="onclick" submit="true"
     refreshMode="partial" refreshId="computedField1" onError="return" > 
    </xp:eventHandler>
    
  3. 更新日期:2013年6月21日

    以下是执行同步xhr调用的代码:

    // --- hijack dojo XHR calls
    if( !dojo._xhr )
        dojo._xhr = dojo.xhr; 
    
    var loadOld;
    
    function hijacked( response, ioArgs ){
       dojo.xhr = dojo._xhr;
       delete dojo._xhr;
       loadOld( response, ioArgs ); // call the original function    
    }
    
    dojo.xhr = function( mode, args, bool ){
        args["sync"] = true;
        loadOld = args["load"];
        args["load"] = hijacked;
    
        dojo._xhr( mode, args, bool );
    }
    

    代码会覆盖xhr Calls的现有Dojo函数,以将所需参数 sync 设置为 true 。如果部分刷新完成,则恢复原始功能。

答案 1 :(得分:1)

当您将其设置为refreshMode =“full”时,您将收到完整的错误消息。当提交导致错误条件时,将显示“发生错误”消息,该错误条件将显示在完整提交中。更改它并查看错误消息。