我在视图Scoped Bean中有一个方法,带有@PreDestroy注释,另一个带有@PostConstruct注释.
@PostConstruct每次导航到使用此视图范围bean的页面时,都会正确调用该方法.
但是,当我导航到新页面(不使用此视图范围bean)时<h:link/>,@PreDestroy永远不会调用该方法.
我不是在谈论手动更改网址或会话结束,仅仅是导航案例.
我错过了什么?
提前致谢
我正在开始一个涉及使用JSF 2.0的新项目.从我最初的阅读开始,该项目的Mojarra和Apache实现涵盖了您将需要的基本组件.
但是我知道用户可以通过面板选项卡,手风琴,滑块等更好的演示来寻求gui ...目前,我还有其他实现,Primefaces,RichFaces和Icefaces.
但我找不到一篇好文章,讨论三者中最好的一篇.
我之前使用过Spring MVC但是我使用JqueryUI来创建这些小部件.既然我是基于组件的框架,我想使用最好的JSF实现.
我想知道诸如性能/互操作性/易用性/支持等指标.
很抱歉,如果我的问题可能含糊不清,但在选择我的JSF供应商实施之前,我想听听意见.
谢谢.
我在@ViewScoped托管bean中读过@EJB会导致java.io.NotSerializableException,但是我的状态保存设置是server.
这是我有的:
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>sispra</display-name>
<welcome-file-list>
<welcome-file>index.jsf</welcome-file>
</welcome-file-list>
<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>*.jsf</url-pattern>
</servlet-mapping>
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<context-param>
<param-name>facelets.BUILD_BEFORE_RESTORE</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.PRETTY_HTML</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.DETECT_JAVASCRIPT</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>primefaces.THEME</param-name>
<param-value>glass-x</param-value>
</context-param> …Run Code Online (Sandbox Code Playgroud) 似乎今天(2012年4月),MyFaces和Mojarra的JSF 2.1实现都存在部分状态保存的缺陷,并且PARTIAL_STATE_SAVING应设置为false.
这是真的?
也许,一些性能比较或一些明显的具体差异是我想知道的.
我听说没有太大的区别.因此,我还有一个问题.出于什么目的,数十人花时间重新发明轮式工具已经实施了更多的规格?
我们正在开发一个应用程序,我们必须支持多个浏览器选项卡/窗口.我们的设置:MyFaces 2.1,Spring,Orchestra
默认情况下,org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION设置为20.这意味着如果您在浏览器中打开21个选项卡,则第一个选项卡中的页面将停止工作 - 给定视图没有视图状态.
如果在第二个选项卡中打开2个选项卡并请求21个视图更新(即Ajax事件),则会发生相同的情况.然后在第一个选项卡中单击将生成相同的异常.
有没有解决的办法?例如,是否可以将视图缓存绑定到会话范围?
对于我的应用程序,我使用的是Tomcat 6.0.x和Mojarra 1.2_04 JSF实现.它运行正常,我想现在切换到JSF的MyFaces 1.2_10 impl.
在部署我的应用程序期间,获得以下错误:
ERROR [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/myApp]] StandardWrapper.Throwable
java.lang.IllegalStateException: No Factories configured for this Application. This happens if the faces-initialization does not work at all - make sure that you properly include all configuration settings necessary for a basic faces application and that all the necessary libs are included. Also check the logging output of your web application and your container for any exceptions!
If you did that and find nothing, the mistake might …Run Code Online (Sandbox Code Playgroud) 所有,
我正在研究如何缩减我们的JSF应用程序在每个用户基础上消耗的会话内存量.
我们正在使用在IBM Websphere 7.0补丁19上运行的MyFaces 1.1.7和Tomahawk 1.1.5.(目前无法升级其中任何一项)
IBM的指导原则是会话大小应该小于5k - 平均大约2.5k,以免影响服务器和会话复制的性能.我们目前正在使用内存到内存,但正在考虑按照IBM的建议迁移到数据库.
我们的网站每个用户的运行速度约为35M.我们将视图状态的数量从100更改为10,并将其降低到大约4M.
我们有几个支持bean,它们当前是会话范围,并且正在考虑将它们更改为请求范围.
我还发现了以下内容:http: //www.econsulting.nl/images/pdf/Tuning%20JSF%20Applications-%20J-Spring%202008.pdf,它似乎有很多关于JSF如何处理某些内容的信息页面.目前仍在调查中以确保所述内容有意义.
我还读过一些地方,无论托管支持bean是会话还是请求范围,视图状态仍将具有bean及其内容.因此视图状态大小不会改变.寻求对此的澄清.
问题是其他人面临同样的问题,其中JSF应用程序往往为给定的用户会话消耗大量内存?
有什么减少这个大小的最佳实践,如果有的话,或者这只是使用JSF的方式?
运行JSF应用程序时IBM WebSphere上的会话复制问题?
有没有关于JSF/MyFaces如何利用堆内存的文档 - Young vs old还是应该在这个范围内考虑?垃圾收集调整?
我们看到的结果是,如果用户跳到另一台服务器,会话数据不会出现,因为数据有多大以及复制需要多长时间.用户体验问题.
我们已经看到一个问题,即会话中对象的更改似乎没有正确更新,并且已经完成了一些会话管理调优,我们在其中自定义设置以便写出所有会话属性.查看.jar文件时,当会话中对象的内容发生更改时,myFaces会正确地进行调用.因此,WebSphere会话侦听器应该接受该更改.
我正在使用Apache MyFaces Commons Validator TagLib.
我该如何将其添加到我的web.xml中?公共JAR通过Maven下载并解决.
XHTML(我认为这是正确的):
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.prime.com.tr/ui"
**xmlns:mcv="http://myfaces.apache.org/commons/validators"**>
Run Code Online (Sandbox Code Playgroud)
web.xml中:
<context-param>
<!-- To add additional tab libs -->
<param-name>facelets.LIBRARIES</param-name>
<param-value>??.xml</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
编辑:我之所以这一步是因为我试图错误地引用Maven依赖,并且这样做,我试图从Apache下载jar并从我自己的存储库管理器托管它.我试图自己托管的jar不包含taglib jar.
在正确获得依赖关系后,一切都按照正常情况工作,没有必要明确定义taglib作为balusC所赞扬的内容.Thankx!
<dependency>
<groupId>org.apache.myfaces.commons</groupId>
<artifactId>myfaces-commons</artifactId>
<version>1.1.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud) 我用maven原型创建了一个新的MyFaces项目 HelloWorld 2.0 OpenWebBeans
并立即测试它mvn clean -Dcontainer="tomcat7" tomcat7:run.一切顺利,直到开始tomcat.该过程陷入以下困境:
INFO: Starting ProtocolHandler ["http-bio-8080"]
Run Code Online (Sandbox Code Playgroud)
我等了20多分钟.这不可能.
信息:端口8080上没有运行其他服务,也没有其他tomcat正在运行.
为什么ProtocolHandler无法启动?!我只想用CDI开发一个JSF应用程序,并使用Maven将它部署在Tomcat7上.如果有人对我有更好的解决方案我 - 吐出来!;)
谢谢!
更新:感谢jstack技巧,非常酷的功能!这是来自jstack的完整StackTrace:我看到http-bio有一个AsyncTimeout并处于TIMED_WAITING状态......接下来我该怎么办?多谢你们!
Full thread dump Java HotSpot(TM) 64-Bit Server VM (23.3-b01 mixed mode):
"http-bio-8080-AsyncTimeout" daemon prio=6 tid=0x000000000c697000 nid=0xf3c waiting on condition [0x000000000d54f000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at org.apache.tomcat.util.net.JIoEndpoint$AsyncTimeout.run(JIoEndpoint.java:148)
at java.lang.Thread.run(Thread.java:722)
"http-bio-8080-Acceptor-0" daemon prio=6 tid=0x000000000ae7a000 nid=0x97c runnable [0x000000000d25e000]
java.lang.Thread.State: RUNNABLE
at java.net.DualStackPlainSocketImpl.accept0(Native Method)
at java.net.DualStackPlainSocketImpl.socketAccept(DualStackPlainSocketImpl.java:121)
at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:183)
- locked <0x00000000f3670350> (a java.net.SocksSocketImpl)
at java.net.ServerSocket.implAccept(ServerSocket.java:522)
at java.net.ServerSocket.accept(ServerSocket.java:490)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60) …Run Code Online (Sandbox Code Playgroud)