xpages - 部分刷新 - 根据输入的字符数隐藏按钮

时间:2017-12-13 12:19:01

标签: xpages xpages-ssjs

在我的xpages应用程序中,我想控制提交按钮(或禁用属性)的可见性,具体取决于在字段中输入的字符数量(xp:inputText)。

我已经为部分刷新https://openntf.org/XSnippets.nsf/snippet.xsp?id=standby-dialog-custom-control实现了xsnippet但是如果我计算输入文本控件中值的长度,那么每个键事件都会出现刷新对话框。

我该如何避免这种情况?我可以暂时避免出现待机对话框,还是应该使用javascript在客户端进行操作?

2 个答案:

答案 0 :(得分:2)

如果你真的需要使用客户端 - 服务器往返计算每个键事件的输入文本控件中的值的长度(例如,如果你想确保没有人会破解你的客户端JS),并假设你使用前面提到的XSnippet并且不希望待机对话框出现在每个按键上,这里通常需要做的事情:

  • 执行XSP.partialRefreshPost时,可以将options对象作为最后一个函数参数传递。只需在此对象中添加一个属性(如果您已经在其中添加了某些内容)或者使用单个属性创建新对象,则必须类似

    XSP.partialRefreshPost('#{id:yourId}', {dontShowDialog: true})
    
  • options对象一直传递到第39行,其中partialrefresh-start事件已发布并将该对象公开为最后一个元素
  • 第137行订阅此活动。在它声明的函数中再添加一个参数,比如

    dojo.subscribe('partialrefresh-start', null, function(method, form, refreshId, options)
    

    现在您可以阅读功能正常的options

  • 根据您的options参数,使用条件语句创建对话框的两个下一行。整件事情看起来像这样:

    dojo.subscribe('partialrefresh-start', null, function(method, form, refreshId, options) {
        if (options) {
            if (options.dontShowDialog) return;
        }
        StandbyDialog_Do = true;
        StandbyDialog_Started();
    });
    

以上所有内容都是针对使用客户端事件处理程序(submit属性设置为false的情况)的情况。如果使用服务器端处理程序,事情会变得有点复杂,因为你不能将任何其他自定义属性传递给最终调用的_partialRefresh方法。但是,我可以想到一种方法来处理这个:

  • 在调用_partialRefresh方法之前,CSJS引擎做了一些准备工作,其中一个是为页面上的一些隐藏输入字段设置特定值。这里我们对$$xspsubmitid字段感兴趣,该字段给出了声明的事件处理程序客户机ID的值。然后,您可以在劫持者XSnippet中读取$$xxpsubmitid字段的值,如果它包含事件处理程序的ID,则不显示备用对话框。这种方式不太灵活,但应该有效

P.S。 Haven没有尝试过上面所写的所有内容,但如果你想尝试失败,我会很高兴进行调查和修复。

答案 1 :(得分:0)

这可以通过客户端脚本完成。无需一直提交数据。

XSP.getElementById('id').hidden=true;