How To Disable Validators Using The XSP.partialRefreshPost Method?
Solution 1:
Here is a PhaseListener which disables the validation if required:
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;
}
}
You just have to add a parameter to your PartialRefresh, and the validation is disabled:
XSP.partialRefreshPost('#{id:refreshMe}', {'params': {'disableValidation':true}} );
Solution 2:
The parameter valmode sets the validation mode and has the following options:
0 for no validation
1 for execution of converters only
2 for execution of converters & validators
For older versions (<8.5.2) it is just true or false.
EDIT: This works for ClientSide Validation only.
Solution 3:
Never tried that before, but according to my copy of the Xpages Portable Command Guide we can send variuous kinds of POST request parameters (I grew to like that book a lot recently...). So I gave it a quick shot and it seems to work on my side. Here's the setup:
- Xpage with 2 buttons plus a panel (id = "fieldContainer").
- Inside the panel sits a simple inputText control with an active required validator.
- A button
The button calls the following CSJS script:
var opt={disableVal":"true"}; //pass param value as text
XSP.partialRefreshPost("#{id:fieldContainer}", {params: opt});
To my inputText I add the following SSJS code under "All Properties > data > disableValidators":
if(!params.isEmpty()){
if(param.get("disableVal")==="true"){true}
}
To verify that the refresh indeed took place I added a computedField control into the same panel bound to a SSJS code showing me the current data/time value:
@Now()
Hope this helps
EDIT:
the book also mentions an option to pass an immediate parameter, but that most probably would not only suppress validation but also submission and conversion of submitted values (I didn't try that one, but nevertheless here's the syntax as described therein):
XSP.partialRefreshPost("#{id:idOfControl}", {immediate: true});
Post a Comment for "How To Disable Validators Using The XSP.partialRefreshPost Method?"