JSF multiple views limit

杀马特。学长 韩版系。学妹 提交于 2019-12-24 00:07:23

问题


I've created a web application that opens up pages inside an iFrame on the main page. Each iFrame is viewable via a tab on the page and uses JSF2.2 with Mojarra view state beans to populate the page.

This works fine when I open up something under 10 tabs; but when I try to open up more, the beans that held the first pages are destroyed and get recreated when I make any calls to the bean thus losing any prior changes the user may have made.

I'm using Apache Tomcat 7 with Catalina, and this issue is happening on my XP and Windows Server 2008 machines.

This is my current web.xml

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>SCMPage</display-name>
  <filter>
    <filter-name>IEFilter</filter-name>
    <filter-class>com.Filter.IEFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>IEFilter</filter-name>
    <url-pattern>*.xhtml</url-pattern>
  </filter-mapping>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>
  <context-param>
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>server</param-value>
  </context-param>
  <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>resources.application</param-value>
  </context-param>
  <listener>
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
  </listener>
  <context-param>
    <description>Location of the Config file for the web application and the engine</description>
    <param-name>configFile</param-name>
    <param-value>C:\Users\ravil7148084\workspace\SCMPage\config.properties</param-value>
  </context-param>  
  <context-param>
    <param-name>com.sun.faces.numberOfViewsInSession</param-name>
    <param-value>30</param-value>
  </context-param>
  <context-param>
    <param-name>com.sun.faces.numberOfLogicalViews</param-name>
    <param-value>30</param-value>
  </context-param>
</web-app>

I've also tried setting this environment variable thinking that it might be a memory limit on tomcat's end, but it didn't make a difference

set JAVA_OPTS=-Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m

Any help would be appreciated!


回答1:


You've there just a severe design error. To include server side page fragments, you're using 90's style iframes instead of true server side include components. Each iframe has its own view state and won't reuse the main document's view state. Just replace all those <iframe> things by <ui:include> and world should be well.

See also:

  • How to include another XHTML in XHTML using JSF 2.0 Facelets?
  • com.sun.faces.numberOfViewsInSession vs com.sun.faces.numberOfLogicalViews


来源:https://stackoverflow.com/questions/25416306/jsf-multiple-views-limit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!