English 中文(简体)
ICEfaces:如何禁用某些表单的发送-接收-更新机制
原标题:
  • 时间:2009-02-19 08:39:25
  •  标签:

我对ICEfaces还比较新,但已经有JSF / Facelets和Java EE等方面的经验。

目前,除了使用一些实用标签(如outputStyle和outputDeclaration)之外,我并没有过多地使用ICEfaces,但即使如此,这也是非常不错的。

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

有没有什么方法来做到这一点?

编辑:为了澄清我的意图:

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

当过滤器重定向到自定义登录页面时,它会将当前请求保存以便稍后“重放”,当用户成功验证后再执行该请求。为了做到这一点,过滤器必须能够检测到POST请求是否来自登录页面(因此是否已经验证/授权用户)。但是,如果每个POST都经过/block/send-receive-updates,则这种方法不再有效。

当然,我可以将登录页面排除在ICEfaces的处理范畴之外,但这意味着我无法在登录页面上使用任何ICEfaces / AJAX功能。

最佳回答

这可能不是做这件事的最佳方式,但它可能是一种方式。为了论证而假设,您的标题包含额外的登录表单。如果您将头信息分别放置在框架内或主布局页面中,并将JSF页面嵌入到iframe中,则这可能有效。其想法是由于它呈现为单独的页面,因此可以用单独的方式处理它。

此外,可能有一种与 IceFaces 更适应的处理安全性的方法。也许,在触发过滤器并确定您未登录时,应该创建一个 bean(可能是会话),保存原始请求的信息(URL、参数等),然后将您发送到登录页面。登录页面完成其操作,添加安全性,然后使用该会话 bean 中的信息强制重定向到新页面。您可以使用 FacesContext 来获取HttpContext 并执行重定向。您可能需要调整重定向以添加任何适当的参数。最后,您应该摆脱会话bean。

最后,我知道有一些框架(Spring WebFlow,提到了“springs”)可以保存您的请求状态,让您进行登录,并将您无缝地重定向回您最初要去的地方(这让我想起,我认为Seam也可以做到这一点。可能Orchestra和其他框架也可以做到)。

希望这可以帮到你!

问题回答

I ve been using IceFaces for nearly a year now and haven t yet come across any way of submitting the form without going via send-receive-updates. But I m curious, you say "I plan on using some AJAX functionality later". The point of IceFaces is that it pretty much transparently adds AJAX to your JSF app. It s an "all or nothing" kind of thing - any page you have which uses IceFaces will use AJAX.

我所能想到你可以做的唯一一件事就是对于你想使用POST请求的页面不使用IceFaces- 也就是说,你可以将IceFaces页面映射到*.iface,但将正常的JSF映射到*.faces。

或者,可能有其他方法来通过过滤器实现您想要做的事情。





相关问题
热门标签