我有两个问题:
RequestContext
bean中的PrimeFaces访问@ApplicationScoped
是否合法?RequestContext
的访问权限?支持bean
@ApplicationScoped
public class MyDatabaseConnection
{
public void do()
{
RequestContext ctx = RequestContext.getCurrentInstance();
// ...
}
}
的index.xhtml
<p:commandButton actionListener="#{myDatabaseConnection.do}"/>
答案 0 :(得分:4)
从@ApplicationScoped bean中的PrimeFaces访问RequestContext是否合法?
是的,只要您不将其指定为应用程序作用域bean的实例变量(属性)。
请注意,同样适用于FacesContext
,ExternalContext
,HttpServletRequest
,HttpServletResponse
,HttpSesison
等等。它们都不是应用程序作用域,因此在被指定/共享为应用程序作用域bean的属性时会导致重大麻烦。
我必须承认,您选择的bean类名MyDatabaseConnection
确实让我与@ApplicationScoped
注释相结合。数据库连接绝对不是应用程序作用域。另请参阅:Is it safe to use a static java.sql.Connection instance in a multithreaded system?
是否必须同步对RequestContext的访问?
不,你不需要。它在当前的代码示例中是在方法本地范围内获得的,而不是作为bean的属性赋值。
以下答案应有助于理解“请求”,“会话”和“应用程序”范围的含义: