Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 在页面访问之前初始化JSF2 SessionBean_Jsf 2 - Fatal编程技术网

Jsf 2 在页面访问之前初始化JSF2 SessionBean

Jsf 2 在页面访问之前初始化JSF2 SessionBean,jsf-2,Jsf 2,我们正在使用JSF2和Tomcat6。在用户访问第一个页面之前,我们需要使用后端值初始化会话bean。我可以知道怎么做吗?如果您只想从页面访问通用的会话范围数据,您可以 仅为该数据编写会话bean 在需要访问该数据的所有页面中使用该会话bean;一个页面不需要只使用一个bean,您可以对大多数页面特定的数据使用一些bean,而对公共数据使用一个bean 在所有需要访问此公共数据的bean中,将该会话bean用作“托管属性”(jsf2中的@ManagedProperty注释) 严格来说,你的要求

我们正在使用JSF2和Tomcat6。在用户访问第一个页面之前,我们需要使用后端值初始化会话bean。我可以知道怎么做吗?

如果您只想从页面访问通用的会话范围数据,您可以

  • 仅为该数据编写会话bean
  • 在需要访问该数据的所有页面中使用该会话bean;一个页面不需要只使用一个bean,您可以对大多数页面特定的数据使用一些bean,而对公共数据使用一个bean
  • 在所有需要访问此公共数据的bean中,将该会话bean用作“托管属性”(jsf2中的@ManagedProperty注释)

    • 严格来说,你的要求是不可能的。一旦用户执行第一个请求,就会创建一个会话。通常,您不能为从未在服务器上请求过任何页面的用户提前创建会话

      从页面引用的任何会话范围bean都将在对该页面的第一次调用期间初始化,并且仅在第一次调用期间初始化。这是你能得到的最好的了


      (如果您实际上指的是SessionBean,而不是会话范围的托管bean,那么情况就有点不同了。因为您没有在问题上使用EJB标记,我想是后者。)

      您能告诉我更多关于您试图实现的目标吗?SessionScoped bean是为新用户会话创建的,因此在用户启动会话之前它不会存在,但您可以拥有一个ApplicationScoped bean或SessionScoped bean可以访问的另一个类。这当然取决于您需要初始化什么。我们希望使用所有页面的公共属性值初始化会话bean。因此用户可以首先加载任何页面,此会话bean需要初始化才能访问。如果要初始化的属性对所有页面和用户都是全局的,您可以使用ApplicationScoped bean而不是SessionScoped吗?如果您只需要在用户的第一个页面视图上访问该bean,SessionScoped bean也可以正常工作。您可以在构造函数中初始化属性,这些属性将可用于第一页视图。