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

时间:2014-02-20 15:56:34

标签: javascript xpages

我正在使用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”和“0”周围引用了各种引号。

这些都不起作用......(即刷新开始 - 但验证器失败则停止)。我希望我在这里得到错误的语法 - 但是找不到任何有用的例子 - 但是; - )

3 个答案:

答案 0 :(得分:13)

这是 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}} );

答案 1 :(得分:2)

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

0表示无法验证

1仅用于执行转换器

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

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

修改 这仅适用于ClientSide验证。

答案 2 :(得分:0)

之前从未尝试过,但是根据我的Xpages可移植命令指南的副本,我们可以发送各种各样的POST请求参数(我最近很喜欢那本书......)。所以我给了它一个快速的镜头,它似乎在我这边工作。这是设置:

  • 带有2个按钮的Xpage加上一个面板(id =“fieldContainer”)。
  • 在面板内部放置一个简单的inputText控件,其中包含一个活动的必需验证器。
  • 按钮

该按钮调用以下CSJS脚本:

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

在我的inputText中,我在“所有属性>数据> disableValidators”下添加了以下SSJS代码:

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

为了确认刷新确实发生了,我将computedField控件添加到绑定到SSJS代码的同一面板中,显示当前数据/时间值:

@Now()

希望这有帮助

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

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