0

显然在带有提交按钮和 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 或单击按钮。只要按钮不是类型提交,它就可以正常工作,但是我当然需要单击按钮,并且我希望可以选择按 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>

4

2 回答 2

3

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

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

有两种解决方法:

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

    <xp:eventHandler event="onclick" submit="true"
     refreshMode="partial" refreshId="computedField1" onError="return" > 
    </xp:eventHandler>
    

更新 21.06.2013

这是执行同步 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 调用的现有 Dojo 函数,以将所需参数sync设置为true。如果部分刷新完成,则恢复原始功能。

于 2013-06-18T20:50:47.900 回答
1

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

于 2013-06-18T04:33:13.003 回答