我的验证器需要知道它是完整请求还是 ajax 请求。在我当前的解决方案中,我检查 http 请求标头X-Requested-With
元素:
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
HttpServletRequest req = (HttpServletRequest) context.getExternalContext().getRequest();
if (req.getHeader("X-Requested-With") != null) {
// do something
} else {
// do something else
}
...
}
有没有更好的方法来实现这一目标?对于不同的浏览器/javascript 库,我的解决方案“安全”吗?
UPDATE:
刚刚发现X-请求-带有仅当 ajax 请求来自 Primefaces 组件库(<p:ajax>
tag).
It is not如果我使用普通 JSF,则存在<f:ajax>
. 所以我的方法不适用于 <f:ajax>
.
Using <f:ajax>
有一个不同的标题:
Faces-Request:partial/ajax
Osw提出的解决方案适用于<f:ajax>
and <p:ajax>
:
PartialViewContext#isAjaxRequest() http://javaserverfaces.java.net/nonav/docs/2.0/javadocs/javax/faces/context/PartialViewContext.html#isAjaxRequest%28%29
我不会依赖 http 标头。我自己从未尝试过,但您可以执行以下操作:
PartialViewContext pvc = facesContext.getPartialViewContext();
if(pvc.isAjaxRequest()) {
// ...
} else {
// ...
}
另一种选择是使用isPartialRequest()
代替isAjaxRequest()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)