在开始之前,我想提到 Seam 3 目前非常绿色。现在跳入的主要原因是为了解决 JSR-299 和 JSF 2 实现中的问题。此外,我正在开始宣传 Seam 3 的进展,以便您可以帮助推动其未来发展并成为这个过程的一部分。
如果您阅读过我所写的关于 Seam 的任何内容,您知道我是一位狂热的页面动作爱好者。不是因为我不认同组件模型的事件驱动风格,而是因为网络是多样化的(以及您的内网也是如此)。很多时候,您唯一能让应用程序正常运行的方式是在这里或那里添加一些页面动作。此外,这对于视图级别的安全性和其他必要条件的执行至关重要。
因此,我完成了 Seam 3 中页面动作的原型。但现在,我们将它们称为视图动作。名称更改的原因是 JSF EG 将 Red Hat 的页面参数贡献重命名为视图参数。因此,我们将页面动作与 EG 确定的术语保持一致。我们希望视图动作能够进入 JSF 2.1。
好的,那么为什么会有这么大的公告?视图动作很有趣,因为它们结合了 JSF 2 中的两个非常酷的功能。首先,视图动作定义在新的元数据面上。这个面是组件树的非渲染区域,可以托管描述页面如何处理的组件。元数据的一个例子就是视图动作。第二个功能是PreRenderViewEvent,这实际上是视图动作的生命所在。这个事件在视图渲染之前被触发。如果视图 ID 被监听器更改,则事件再次被触发。但这留给我们实际编织导航处理。
因此,您现在将不再使用 pages.xml,而是在视图模板中定义页面动作(并且能够利用 Facelets 模板在页面之间共享常见定义)
<f:metadata> <s:viewAction execute="#{blog.loadEntry}"/> </f:metadata>
视图动作几乎与Seam 2中的工作方式相同。如果匹配到导航情况,它会短路后续所有视图动作的执行。默认情况下,视图动作仅在初始请求时执行。您可以使用onPostback="true"使它们在每次请求时执行。您还可以提供条件来控制动作是否根据上下文执行(例如if="#{facesContext.validationFailed}").
我已经实现了一个视图级别的安全性的初步原型
<s:restrictView required="#{identity.loggedIn}"/>
您可能也对如何实现这两个功能感兴趣。我设置了一个处理器链,因此
- 在视图渲染之前添加额外行为很容易
- 因此,每个处理器都可以实现为一个JSR-299 bean,并利用上下文注入
查看。给我们反馈。您可以在Seam 3预订示例和永久链接示例中看到这些组件的实际应用。