如何使用XSP.partialRefreshPost方法禁用验证器



我正在使用XSP.partialRefreshPost从客户端Javascript触发部分刷新。我希望能够在不触发验证器的情况下进行部分刷新(这只是普通输入控件上的一个简单属性)。

我发现了一些对"options"参数的引用,您可以将其与XSP.partialRefreshPost结合使用(包括控制验证的能力)。但是,我没有找到任何描述语法/选项名称的地方???

有人知道怎么做吗?

编辑:

好的,我添加了几个我试图澄清的例子。我对XPages便携式命令指南也很感兴趣。

首先,使用"立即"参数:

$(".selectCtrl").on("change", function(e){XSP.partialRefreshPost("#{id:repeatCtrl}", {immediate: true})})

然后,使用"valmode"参数:

$(".selectCtrl").on("change", function(e){XSP.partialRefreshPost("#{id:repeatCtrl}", {params: {'valmode': 0}})})

后者在"valmode"one_answers"0"周围有引号的变体。

这些都不起作用。。。(即刷新开始,但由于验证器失败而停止)。我希望我只是在这里得到了错误的语法-但还没有找到任何工作示例-还;-)

这里有一个PhaseListener,如果需要,它会禁用验证:

package ch.hasselba.demo;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import com.ibm.xsp.context.ExternalContextEx;
import com.ibm.xsp.context.FacesContextExImpl;
public class DisableValidationPhaseListener implements PhaseListener {
private static final long serialVersionUID = 1L;
public void afterPhase(PhaseEvent arg0) {}
public void beforePhase(PhaseEvent arg0) {
FacesContextExImpl fc  = (FacesContextExImpl) arg0.getFacesContext();
ExternalContextEx ec = (ExternalContextEx) fc.getExternalContext();
// check for the "disableValidation" parameter & disable validation
// if required
if( ec.getRequestParameterMap().containsKey("disableValidation") )
fc.setDisableValidators(true);
}
public PhaseId getPhaseId() {
return PhaseId.PROCESS_VALIDATIONS;
}
}

您只需在PartialRefresh中添加一个参数,验证就会被禁用:

XSP.partialRefreshPost('#{id:refreshMe}', {'params': {'disableValidation':true}} );

参数valmode设置验证模式,并具有以下选项:

0表示无验证

1只用于执行转换器

2用于执行转换器&验证器

对于旧版本(<8.5.2),它只是真或假。

编辑:这仅适用于客户端验证。

以前从未尝试过,但根据我的Xpages Portable Command Guide副本,我们可以发送各种POST请求参数(我最近越来越喜欢那本书了…)。所以我快速尝试了一下,它似乎对我有利。设置如下:

  • Xpage,带有2个按钮和一个面板(id="fieldContainer")
  • 面板内部有一个简单的inputText控件,其中包含一个活动的必需验证器
  • 一个按钮

按钮调用以下CSJS脚本:

var opt={disableVal":"true"}; //pass param value as text
XSP.partialRefreshPost("#{id:fieldContainer}", {params: opt});

在我的inputText中,我在"All Properties>data>disableValidators"下添加了以下SSJS代码:

if(!params.isEmpty()){
if(param.get("disableVal")==="true"){true}
}

为了验证刷新是否确实发生,我在同一面板中添加了一个computedField控件,该控件绑定到一个SSJS代码,向我显示当前数据/时间值:

@Now()

希望这能帮助

编辑:
这本书还提到了一个传递即时参数的选项,但这很可能不仅会抑制验证,还会抑制提交和转换提交的值(我没有尝试过,但这里有其中描述的语法):

XSP.partialRefreshPost("#{id:idOfControl}", {immediate: true});

最新更新