java - ICEfaces:如何禁用某些表单的发送接收更新机制

标签 java ajax jsf icefaces

我对 ICEfaces 还很陌生,但已经有 JSF/Facelets 和 Java EE 的总体经验。

目前,除了一些实用标签(如outputStyle 和outputDeclaration)之外,我并没有使用太多的ICEfaces,但即便如此,拥有它也非常好。

尽管我计划稍后使用一些 AJAX 功能,但我还是有一些 h:forms(或ice:forms),我想将它们作为正常的 JSF POST 请求发送,而不通过/block/send-receive-updates。原因是,我想使用一个过滤器,它作用于请求的 URI,如果所有内容都发送到/block/send-receive-updates,这是不可能的。

有什么办法可以做到这一点吗?

编辑:澄清我想要做什么:

我们正在开发的网站由公开可用的页面和一些只有注册成员(member)才能访问的页面组成。 servlet 标准中定义的基于标准 FORM 的安全机制非常不灵活,因为它只允许定义当有人想要访问某些受限制内容时显示的单个登录页面。因为我们还希望用户能够使用每个页面上可见的小型登录表单进行登录,所以我们开发了一个过滤器,它几乎像 Web 容器一样处理身份验证和授权。如果用户未经过身份验证/授权,它会重定向到自定义登录页面,但也允许从 backing-bean 对用户进行身份验证。为了使其几乎透明地工作,它包装了 HttpServletRequest 以提供主体和用户角色。

当过滤器重定向到自定义登录页面时,它会保存当前请求,以便稍后在用户成功通过身份验证后“重播”该请求。为此,过滤器必须能够检测 POST 请求是否来自登录页面(以及用户现在是否已通过身份验证/授权)。但如果每个 POST 都通过/block/send-receive-updates 进行,那么这就不再起作用了。

当然,我可以排除登录页面由 ICEfaces 处理,但这意味着我无法在登录页面上使用任何 ICEfaces/AJAX。

最佳答案

这可能不是最好的方法,但它可能是一种方法。为了便于论证,我假设您的 header 包含您的额外登录表单。如果您要将 header 放在单独的框架中或主布局页面中,并将 JSF 页面嵌入到 iframe 中,这可能会起作用。这个想法是,由于它被呈现为单独的页面,因此您可以以单独的方式处理它。

此外,可能有一种不同的方式来处理您的安全性,这将使这更加 IceFaces-y。也许,当你点击过滤器并且它确定你没有登录时,它应该创建一个 bean(可能是 session ),它保存来自原始请求的信息(URL、参数等),并将你发送到登录页面。登录页面执行其任务,添加安全内容,然后使用该 session bean 中的信息强制重定向到新页面。您可以使用 FacesContext 获取 HttpContext 并执行重定向。您可能需要使用重定向来添加任何适当的参数。最后,您应该删除 session bean。

最后,我知道有几个框架(Spring WebFlow,springs)可以保存您的请求状态,让您进行登录,并将您重定向回原来的位置首先,非常无缝地进行(这提醒了我,我认为 Seam 也可以做到这一点。可能还有 Orchestra 和您的其他框架。)

希望这有帮助!

关于java - ICEfaces:如何禁用某些表单的发送接收更新机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/564411/

相关文章:

java - 你能制作一个不可关闭、不可离开的 Java 应用程序吗?

java - 未使用 log4j.properties 文件中提供的日志模式

python - 使用带有 Python Flask 的 AJAX 将 html 插入模板

java - 直接在 JBoss 服务器上配置 javax.faces.FACELETS_REFRESH_PERIOD

java - 追加到 JTextArea?

Java ArrayList 搜索和删除

c# - AJAX 和 Web Api 发布方法 - 它是如何工作的?

javascript - 使用 PHP、JQuery 和 AJAX 从数据库获取 JSON 格式的数据

jsf - 扩展 @FacesComponent 作为复合接口(interface) componentType 不呈现任何内容

jsf - 输入多个没有自动完成的标签