我正在使用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”周围引用了各种引号。
这些都不起作用......(即刷新开始 - 但验证器失败则停止)。我希望我在这里得到错误的语法 - 但是找不到任何有用的例子 - 但是; - )
答案 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请求参数(我最近很喜欢那本书......)。所以我给了它一个快速的镜头,它似乎在我这边工作。这是设置:
该按钮调用以下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});