Xpages 如何从按钮禁用特定字段的验证程序

Xpages 如何从按钮禁用特定字段的验证程序,xpages,Xpages,我有一个加载引导模式窗口的xpage(见图)。我只需要在用户按下“添加新数据”按钮时验证数据。我不希望在按下“保存并继续”或“上一步”按钮时运行验证程序 模态对话框是在整个应用程序中多次使用的自定义控件。我无法更改按钮以禁用验证器,因为大多数时间我都想验证。中心内容存储在其自己的自定义控件中 我的问题是,我能否向按钮添加代码以获得每个控件的句柄,并将disableValidators设置为true。我还不知道如何执行此操作。我已经尝试过计算DisableValidator,但完全没有成功。这些字

我有一个加载引导模式窗口的xpage(见图)。我只需要在用户按下“添加新数据”按钮时验证数据。我不希望在按下“保存并继续”或“上一步”按钮时运行验证程序

模态对话框是在整个应用程序中多次使用的自定义控件。我无法更改按钮以禁用验证器,因为大多数时间我都想验证。中心内容存储在其自己的自定义控件中

我的问题是,我能否向按钮添加代码以获得每个控件的句柄,并将disableValidators设置为true。我还不知道如何执行此操作。我已经尝试过计算DisableValidator,但完全没有成功。这些字段都绑定到作用域变量

我知道我可以在这里使用客户端验证,但应用程序的其余部分使用服务器端,我希望保持一致+这是一个响应迅速的应用程序,移动客户端很烦人


我建议相反的方法,而不是向按钮添加代码,并为每个控件设置
禁用验证器。对于每个控件,仅当用户按下“添加新”按钮时,才设置
required
属性

详细描述了它。下面的函数允许您测试特定组件是否触发了更新

// Used to check which if a component triggered an update
function submittedBy( componentId ){
 try {
  var eventHandlerClientId = param.get( '$$xspsubmitid' );
  var eventHandlerId = @RightBack( eventHandlerClientId, ':' );
  var eventHandler = getComponent( eventHandlerId );  
  if( !eventHandler ){ return false; }

  var parentComponent = eventHandler.getParent();
  if( !parentComponent ){ return false; }

  return ( parentComponent.getId() === componentId );  
 } catch( e ){ /*Debug.logException( e );*/ }
}
因此,如果您希望验证仅在用户单击特定的“添加新”按钮时运行,请将其写入所有必需的属性:

return submittedBy('id-of-add-new-button')

与其向按钮添加代码,并为每个控件设置
禁用验证器
,我建议相反的方法。对于每个控件,仅当用户按下“添加新”按钮时,才设置
required
属性

详细描述了它。下面的函数允许您测试特定组件是否触发了更新

// Used to check which if a component triggered an update
function submittedBy( componentId ){
 try {
  var eventHandlerClientId = param.get( '$$xspsubmitid' );
  var eventHandlerId = @RightBack( eventHandlerClientId, ':' );
  var eventHandler = getComponent( eventHandlerId );  
  if( !eventHandler ){ return false; }

  var parentComponent = eventHandler.getParent();
  if( !parentComponent ){ return false; }

  return ( parentComponent.getId() === componentId );  
 } catch( e ){ /*Debug.logException( e );*/ }
}
因此,如果您希望验证仅在用户单击特定的“添加新”按钮时运行,请将其写入所有必需的属性:

return submittedBy('id-of-add-new-button')

与其向按钮添加代码,并为每个控件设置
禁用验证器
,我建议相反的方法。对于每个控件,仅当用户按下“添加新”按钮时,才设置
required
属性

详细描述了它。下面的函数允许您测试特定组件是否触发了更新

// Used to check which if a component triggered an update
function submittedBy( componentId ){
 try {
  var eventHandlerClientId = param.get( '$$xspsubmitid' );
  var eventHandlerId = @RightBack( eventHandlerClientId, ':' );
  var eventHandler = getComponent( eventHandlerId );  
  if( !eventHandler ){ return false; }

  var parentComponent = eventHandler.getParent();
  if( !parentComponent ){ return false; }

  return ( parentComponent.getId() === componentId );  
 } catch( e ){ /*Debug.logException( e );*/ }
}
因此,如果您希望验证仅在用户单击特定的“添加新”按钮时运行,请将其写入所有必需的属性:

return submittedBy('id-of-add-new-button')

与其向按钮添加代码,并为每个控件设置
禁用验证器
,我建议相反的方法。对于每个控件,仅当用户按下“添加新”按钮时,才设置
required
属性

详细描述了它。下面的函数允许您测试特定组件是否触发了更新

// Used to check which if a component triggered an update
function submittedBy( componentId ){
 try {
  var eventHandlerClientId = param.get( '$$xspsubmitid' );
  var eventHandlerId = @RightBack( eventHandlerClientId, ':' );
  var eventHandler = getComponent( eventHandlerId );  
  if( !eventHandler ){ return false; }

  var parentComponent = eventHandler.getParent();
  if( !parentComponent ){ return false; }

  return ( parentComponent.getId() === componentId );  
 } catch( e ){ /*Debug.logException( e );*/ }
}
因此,如果您希望验证仅在用户单击特定的“添加新”按钮时运行,请将其写入所有必需的属性:

return submittedBy('id-of-add-new-button')

你试过在按钮事件中将disableValidators属性设置为true吗?我不能这样做,因为保存模式控件的CC就像10个不同的窗口一样,更改该设置会修复此窗口并破坏其他窗口。你确实给了我一个主意,我想我可以克隆CC,为这个窗口做个特例。对于下一个程序员来说,这是更难的,但是要考虑的事情。你试过简单地在按钮事件上设置DababalValueStor属性为true吗?我不能这么做,因为CC包含了10个不同窗口的模态控件,并且改变该设置将修复这个窗口并打破其他窗口。你确实给了我一个主意,我想我可以克隆CC,为这个窗口做个特例。对于下一个程序员来说,这是更难的,但是要考虑的事情。你试过简单地在按钮事件上设置DababalValueStor属性为true吗?我不能这么做,因为CC包含了10个不同窗口的模态控件,并且改变该设置将修复这个窗口并打破其他窗口。你确实给了我一个主意,我想我可以克隆CC,为这个窗口做个特例。对于下一个程序员来说,这是更难的,但是要考虑的事情。你试过简单地在按钮事件上设置DababalValueStor属性为true吗?我不能这么做,因为CC包含了10个不同窗口的模态控件,并且改变该设置将修复这个窗口并打破其他窗口。你确实给了我一个主意,我想我可以克隆CC,为这个窗口做个特例。这对下一个程序员来说是比较难的,但是要考虑的事情。Naveen,谢谢你的回答,我会尝试这个路线,看看我是否能让它工作。这很完美。我应该记得这个技巧,因为我知道汤米的博客帖子,因为我的名字出现在一年多前的评论中。再次感谢!!!纳文,谢谢你的回答,我想试试这条路线,看看能不能让它发挥作用。这条路很好用。我应该记得这个技巧,因为我知道汤米的博客帖子,因为我的名字出现在一年多前的评论中。再次感谢!!!纳文,谢谢你的回答,我想试试这条路线,看看能不能让它发挥作用。这条路很好用。我应该记得这个技巧,因为我知道汤米的博客帖子,因为我的名字出现在一年多前的评论中。再次感谢!!!纳文,谢谢你的回答,我想试试这条路线,看看能不能让它发挥作用。这条路很好用。我应该记得这个技巧,因为我知道汤米的博客帖子,因为我的名字出现在一年多前的评论中。再次感谢!!!