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

xpages-部分刷新-根据输入的字符数隐藏按钮,xpages,xpages-ssjs,Xpages,Xpages Ssjs,在我的xpages应用程序中,我希望根据字段(xp:inputText)中输入的字符数控制提交按钮(或禁用属性)的可见性 我已经为部分刷新实现了xsnippet,但是如果我计算输入文本控件中每个键事件出现的值的长度,刷新对话框就会出现 我怎样才能避免这种情况?我可以暂时避免出现待机对话框,还是应该使用javascript在客户端执行此操作?这可以通过客户端脚本完成。无需一直提交数据 XSP.getElementById('id')。hidden=true这可以通过客户端脚本完成。无需一直提交数

在我的xpages应用程序中,我希望根据字段(xp:inputText)中输入的字符数控制提交按钮(或禁用属性)的可见性

我已经为部分刷新实现了xsnippet,但是如果我计算输入文本控件中每个键事件出现的值的长度,刷新对话框就会出现


我怎样才能避免这种情况?我可以暂时避免出现待机对话框,还是应该使用javascript在客户端执行此操作?

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


XSP.getElementById('id')。hidden=true这可以通过客户端脚本完成。无需一直提交数据


XSP.getElementById('id')。hidden=true如果您确实需要使用客户端-服务器往返(例如,如果您希望确保没有人会攻击您的客户端JS)计算每个按键事件上输入文本控件中的值的长度,并且假设您使用前面提到的XSnippet,并且不希望每次按键时都出现待机对话框,以下是您通常需要执行的操作:

  • 执行
    XSP.partialRefreshPost
    时,可以将
    选项
    对象作为最后一个函数参数传递。只需向该对象添加一个属性(如果您已经将某些内容放入其中)或使用单个属性创建新对象,它必须类似于

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

    dojo.subscribe('partialrefresh-start', null, function(method, form, refreshId, options)
    
    现在您可以在函数体中读取
    选项了

  • 有点像是根据您的
    选项
    参数,用条件语句包装下两行创建对话框。整个事情可以是这样的:

    dojo.subscribe('partialrefresh-start', null, function(method, form, refreshId, options) {
        if (options) {
            if (options.dontShowDialog) return;
        }
        StandbyDialog_Do = true;
        StandbyDialog_Started();
    });
    
以上所有内容都是针对使用客户端事件处理程序的情况编写的(将
submit
属性设置为
false
的方法。如果使用服务器端处理程序,事情会变得有点复杂,因为您无法将任何其他自定义属性传递给最终调用的
\u partialRefresh
方法。但是,我可以想出一种方法来处理此问题:

  • 在调用
    \u partialRefresh
    方法之前,CSJS引擎会做一些准备工作,其中之一是为页面上的一些隐藏输入字段设置特定值。这里我们感兴趣的是
    $$xspsubmitid
    字段,该字段给定了声明的事件处理程序客户端id的值。然后您可以读取
    $$xxp的值如果它包含事件处理程序的ID,则不要显示待机对话框。这种方式灵活性要低得多,但应该可以工作

p.S.还没有尝试过上面写的所有内容,但如果你尝试失败,我很乐意调查并修复。

如果你真的需要使用客户端-服务器往返计算每个关键事件的输入文本控件中的值的长度(例如,如果你想确保没有人会攻击你的客户端JS),并且假设您使用前面提到的XSnippet,并且不希望每次按键时都出现待机对话框,那么您通常需要执行以下操作:

  • 当您执行
    XSP.partialRefreshPost
    时,可以将
    选项
    对象作为最后一个函数参数传递。只需向该对象添加一个属性(如果您已经将某个属性放入其中)或使用单个属性创建新对象,该属性必须类似于

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

    dojo.subscribe('partialrefresh-start', null, function(method, form, refreshId, options)
    
    现在您可以在函数体中读取
    选项了

  • 接下来的两行是基于
    选项
    参数创建对话框的条件语句。整个过程如下所示:

    dojo.subscribe('partialrefresh-start', null, function(method, form, refreshId, options) {
        if (options) {
            if (options.dontShowDialog) return;
        }
        StandbyDialog_Do = true;
        StandbyDialog_Started();
    });
    
以上所有内容都是针对使用客户端事件处理程序的情况编写的(将
submit
属性设置为
false
的方法。如果使用服务器端处理程序,事情会变得有点复杂,因为您无法将任何其他自定义属性传递给最终调用的
\u partialRefresh
方法。但是,我可以想出一种方法来处理此问题:

  • 在调用
    \u partialRefresh
    方法之前,CSJS引擎会做一些准备工作,其中之一是为页面上的一些隐藏输入字段设置特定值。这里我们感兴趣的是
    $$xspsubmitid
    字段,该字段给定了声明的事件处理程序客户端id的值。然后您可以读取
    $$xxp的值如果它包含事件处理程序的ID,则不要显示待机对话框。这种方式灵活性要低得多,但应该可以工作

p.S.我还没有尝试上面写的所有内容,但如果您尝试失败,我很乐意进行调查和修复。

添加一个客户端脚本,该脚本不允许用户输入超过x个字符。无需向用户发送消息或重新加载。只需在达到最大字符数时防止键入。添加一个客户端脚本,该脚本不允许用户输入er超过x个字符。无需向用户发送消息或重新加载。只需在达到最大字符数时防止键入即可。