gpt4 book ai didi

java - 在 JSF 自定义 validator 中区分 ajax 请求和完整请求

转载 作者:搜寻专家 更新时间:2023-10-30 21:22:27 24 4
gpt4 key购买 nike

我的 validator 需要知道它是完整请求还是 ajax 请求。在我当前的解决方案中,我检查了 X-Requested-With 的 http 请求 header 。元素:

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 库,我的解决方案“安全”吗?

更新:

刚刚发现只有当 ajax 请求来自 Primefaces 组件库(<p:ajax> 标记)时,X-Requested-With header 才会出现。

如果我使用纯 JSF,它存在 <f:ajax> . 所以我的方法不适用于 <f:ajax> .

使用 <f:ajax>有一个不同的标题:

Faces-Request:partial/ajax

Osw 提出的解决方案适用于 <f:ajax> <p:ajax> :

PartialViewContext#isAjaxRequest()

最佳答案

我不会依赖 http header 。我自己从未尝试过,但您可以执行以下操作:

PartialViewContext pvc = facesContext.getPartialViewContext();
if(pvc.isAjaxRequest()) {
// ...
} else {
// ...
}

另一种选择是使用 isPartialRequest() 而不是 isAjaxRequest()

关于java - 在 JSF 自定义 validator 中区分 ajax 请求和完整请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7428058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com