随着CDI的portlet集成库的放出,我们可以在JSF portlet中通过Portlet桥,利用CDI带来的巨大优点。
怎么使用?
除了通常的Portlet桥依赖以外,在portlet中使用CDI还需要:
<dependency> <groupId>org.gatein</groupId> <artifactId>cdi-portlet-integration</artifactId> <version>1.0.2.Final</version> </dependency>
<filter> <filter-name>PortletCDIFilter</filter-name> <filter-class>org.gatein.cdi.PortletCDIFilter</filter-class> <lifecycle>ACTION_PHASE</lifecycle> <lifecycle>EVENT_PHASE</lifecycle> <lifecycle>RENDER_PHASE</lifecycle> <lifecycle>RESOURCE_PHASE</lifecycle> </filter> <filter-mapping> <filter-name>PortletCDIFilter</filter-name> <portlet-name>yourPortletName</portlet-name> </filter-mapping>PortletCIDFilter只包括接收到的portlet请求可以使用CDI。如果你的程序代码框架需要处理portlet响应,则需要使用即可以处理请求又能够处理响应的PortletCDIResponseFilter来代替。
@RequestScoped
使用此作用域的bean在portlet中的行为与常规的JSF不同。在portelt中,设定为ActionRequest的bean类,其中任何修改的内容都无法到达portlet生命周期的其他阶段,包括RenderRequest。所以,建议不要一个JSF的portlet中的CDI bean类中,使用此作用域。推荐使用GateIn 3.6.0 Final中新增的@PortletLifecycleScoped。这个新的作用域允许为了渲染portlet,在一个action里面,设置你想要的数据;并且可以从ActionRequest到RenderRequest阶段保持Bean的实体。
@ConversationScoped
临时会话跟一个标记为@RequestScoped的Bean类具有相同的行为。因此,不推荐为渲染JSF portlet而让数据可用。
预计JSF portlet会提供对长会话的支持,但是,仍然有一些问题需要注意:
GateIn Scopes
最近,在GateIn 3.6.0 Final版本中提供了两个新的作用域:@PortletLifecycleScoped与@PortletRedisplayScoped。这两个作用域在JSF portlet中非常实用,并且可以跟其他的CDI作用域的bean类进行无缝交互。这些作用域将在GateIn的博客文章中展开讨论。
希望这篇文章能够指出在JSF portlet开发中,使用CDI时的一些常见陷阱。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务