标签: myfaces

重定向后保留JSF消息

我有一个JSF页面(使用MyFaces 2.0),它在第一次显示时会收集一些数据.如果找不到某些信息,则应该提供该效果的消息并重定向回另一个页面.我已经尝试使用此处找到的解决方案保存FacesMessage重定向到JSF中的<h:message>(setKeepMessages(true)),但重定向后没有显示消息.我可以选择的唯一区别是我没有使用导航规则,我在外部上下文上调用redirect()调用,因为这不是在正常操作中发生的.

相关代码:

public void redirectToPageWithMessage(String inPage, String message, FacesMessage.Severity severity){
    getFlash().setKeepMessages(true);
    addMessage(message, severity);
    try {
        getFacesContext().getExternalContext().redirect(inPage);
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这似乎不起作用.重定向发生得很好,但<messages />标签没有显示消息.redirect()发生的方式有什么不同可以防止这种情况发生吗?

jsf myfaces jsf-2

6
推荐指数
1
解决办法
8222
查看次数

java.lang.ClassNotFoundException:org.apache.myfaces.webapp.StartupServletContextListener

我在启动JSF Web应用程序时遇到以下异常:

SEVERE: Error configuring application listener of class org.apache.myfaces.webapp.StartupServletContextListener
java.lang.ClassNotFoundException: org.apache.myfaces.webapp.StartupServletContextListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3786)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:516)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Run Code Online (Sandbox Code Playgroud)

这是我的web.xml档案

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
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_2_5.xsd">
 <display-name>J2S</display-name>
 <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>client</param-value>
 </context-param>
 <context-param>
  <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
  <param-value>resources.application</param-value>
 </context-param>
 <context-param> …
Run Code Online (Sandbox Code Playgroud)

myfaces jsf-2

6
推荐指数
1
解决办法
5万
查看次数

使用Ajax4jsf 1.x将JSF 1.1迁移到JSF 2

我们正在将JSF 1.1(MyFaces)项目迁移到JSF 2.我们的想法是通过将JSP和XHTML保持在一起一段时间来定期迁移.我们在JSP页面中使用了许多ajax4jsf-1.1.1标记.我们不使用RichFaces.将系统配置为JSF 2(Balusc教程中提到的所有配置更改)当尝试在类路径中使用ajax4jsf.jar访问JSP页面时,我们得到一个异常:

Caused by: java.lang.IllegalStateException: setViewHandler may not be executed after a lifecycle request has been completed
    at org.apache.myfaces.application.ApplicationImpl.setViewHandler(ApplicationImpl.java:853)
    at org.ajax4jsf.framework.ajax.InitPhaseListener.beforePhase(InitPhaseListener.java:92)
    at org.apache.myfaces.lifecycle.PhaseListenerManager.informPhaseListenersBefore(PhaseListenerManager.java:76)
    at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:131)
Run Code Online (Sandbox Code Playgroud)

它看起来ajax4jsf.jar与JSF 2不兼容.看起来LifeCycle配置存在一些问题.

有没有什么办法可以让a4j与JSF 2 JSP一起工作?我知道当我们使用XHTML时,我们不需要这一切.

jsf richfaces myfaces ajax4jsf jsf-2

6
推荐指数
1
解决办法
4531
查看次数

如何在JSF2中指定资源库版本?

假设我resources/在webroot中有一个文件夹。在其中,我有一个css/文件夹,在其中有一个theme.css文件。

但是我想设置一个Expires:标题。因此,我想对资源库使用一个版本,例如

<h:outputStylesheet library="css" name="theme.css"/>
Run Code Online (Sandbox Code Playgroud)

会变成

<link rel="stylesheet" src="javax.faces.resources/theme.css.xhtml?ln=css"/>
Run Code Online (Sandbox Code Playgroud)

但我想指定类似

<h:outputStylesheet library="css" name="theme.css" version="1.2"/>
Run Code Online (Sandbox Code Playgroud)

并得到

<link rel="stylesheet" src="javax.faces.resources/theme.css.xhtml?ln=css&v=1_2"/>
Run Code Online (Sandbox Code Playgroud)

或类似。我已经了解到JSF2支持资源版本控制,但是如何指定要加载的版本以及将文件放在何处

jsf myfaces jsf-2 mojarra

5
推荐指数
1
解决办法
2666
查看次数

在无状态模式下运行JSF(状态保存为0)

我最近遇到了由Rudi开发的JSF(Mojarra)的无状态扩展,声称以更低的内存/ CPU成本和减少的延迟提供了大量的性能改进,具有0个内存开销以节省状态并且还告别陈旧的视图(回发将始终有效).这一切看起来都令人印象深刻!

我是一个天真的JSF开发人员,参与使用JSF进行高性能互联网应用的项目.我想知道在迁移到JSF中的无状态页面之前我应该​​担心什么问题.我已经使用这个无状态项目测试了我的应用程序(大多数事情除了一些之外无缝地工作)但我想知道在迁移之前我应该​​考虑的事情.

我知道已经有人建议在官方JSF规范中包含无状态模式功能,但我不确定需要多长时间才会发生,直到这个JSF扩展对我来说有很大帮助.

还有,那里有没有,在生产环境中也使用无状态JSF项目?

-

更新: 对于那些使用Myfaces的人来说,无状态扩展已由Thomas Andraschko重新实现,并且已被提议添加到Myfaces核心项目中.


使用JSF 2.1.3与无状态扩展和Primefaces 3.4快照.

jsf myfaces primefaces jsf-2 jsf-stateless

5
推荐指数
0
解决办法
1726
查看次数

PrimeFaces组件的自定义渲染器在Tomcat中工作正常,但在Websphere中没有

我正在使用MyFaces 2.1.9和PrimeFaces 3.5.我为它实现了一个自定义渲染器<p:inputText>.这在Tomcat的家中运行良好.但这与使用Websphere不起作用.我在自定义渲染器类中放置了断点,但它们从未被击中.我的日志中也没有看到任何内容.但是,当我在标准JSF上注册完全相同的自定义渲染器时<h:inputText>,它工作正常.

我把它注册如下faces-config.xml:

<render-kit>
    <renderer>
        <component-family>org.primefaces.component</component-family>
        <renderer-type>org.primefaces.component.InputTextRenderer</renderer-type>
        <renderer-class>xxx.xxx.xxx.MyInputRenderer</renderer-class>
    </renderer>
</render-kit>
Run Code Online (Sandbox Code Playgroud)

如何解决自定义渲染器的注册问题?

websphere jsf myfaces custom-renderer jsf-2

5
推荐指数
1
解决办法
2231
查看次数

IllegalArgumentException:com.ibm.ws.jsf.config.annotation.WASMyFacesAnnotationProvider is no org.apache.myfaces.spi.AnnotationProvider

我正在尝试在Websphere 8.5.5上部署应用程序我已经为Websphere创建了一个共享库,其中包括myfaces 2.2 jar和其他依赖项,如commons-collections.
我还将我的应用程序的类加载器作为PARENT_LAST.
部署应用程序时,我得到以下异常:

An error occured while initializing MyFaces: Class com.ibm.ws.jsf.config.annotation.WASMyFacesAnnotationProvider is no org.apache.myfaces.spi.AnnotationProvider
java.lang.IllegalArgumentException: Class com.ibm.ws.jsf.config.annotation.WASMyFacesAnnotationProvider is no org.apache.myfaces.spi.AnnotationProvider
at org.apache.myfaces.shared.util.ClassUtils.buildApplicationObject(ClassUtils.java:557)
at org.apache.myfaces.shared.util.ClassUtils.buildApplicationObject(ClassUtils.java:524)
Run Code Online (Sandbox Code Playgroud)

websphere jsf myfaces jsf-2.2

5
推荐指数
1
解决办法
2366
查看次数

在其他会话中重用ViewState值(CSRF)

我正在使用*myfaces-api-2.2.3并将javax.faces.STATE_SAVING_METHOD设置为client,

我有以下场景,

1)用户X登录系统并添加用户XXX(使用jsf f:ajax操作),同时检查chrome dev工具,您可以看到与ViewState值一起提交的表单.

2)复制ViewState值(来自chrome dev工具 - >网络选项卡) - >将其放入带有表单的html文件中(模仿我原来的添加用户X)

3)从用户X会话注销(会话在该过程中失效)

4)用户Y登录 - > 在浏览器中打开 html文件并点击表单的提交按钮 - >你会注意到添加了用户XXX(尽管表格中使用的ViewState值属于其他用户(用户X).

我认为ViewState的价值不能以这种方式被使用,我认为应该阻止这种行为,怎么就可以使用一个的ViewState在拥有自己的一个全新的会话值ViewState的价值,以及如何能我确保用户不能重用ViewState


请参阅我的另一个问题和BalusC的回答:在客户端状态保存的情况下防止JSF2中的CSRF

viewstate myfaces jsf-2 jsf-2.2

5
推荐指数
1
解决办法
2831
查看次数

轮询间隔在JSF中刷新页面时获得更改

我使用JSF poll标签在JSP中重新加载数据表.页脚中还有另一个JSP.它有一个按钮,用新数据重新加载页面.

问题是;

当我单击页脚上的按钮时,它会更改轮询间隔的频率.

贝娄是代码样本;

main.jsp中

<et:partialTriggerGroup id="statusUpdatePoller">
<tr:poll interval="10000" id="statusUpdatePoller" pollListener="#{ServerSideClass.statusUpdate}"/>
<m:dataTable>
...
</m:dataTable>

</et:partialTriggerGroup>
Run Code Online (Sandbox Code Playgroud)

footer.jsp中

<et:partialTriggerGroup id="pageControlTrigger">
...

<tr:commandLink action="#{ServerSideClass.statusUpdate}"  partialSubmit="true" />
</et:partialTriggerGroup>
Run Code Online (Sandbox Code Playgroud)
  • 刷新按钮和轮询标记都调用相同的服务器端方法(ServerSideClass.statusUpdate())来加载数据.
  • 如果我没有按下Footer.jsp上的按钮,则轮询间隔可以正常工作.
  • 如果那个按钮按间隔频率得到改变.(页面在2,3秒内刷新)

这个实现有什么问题吗?

TIA.

ajax jsf myfaces trinidad jsf-2

5
推荐指数
0
解决办法
287
查看次数

禁用oam.Flash.RENDERMAP.TOKEN

我正在使用Apache MyFaces 2.0.我注意到oam.Flash.RENDERMAP.TOKEN为每个视图创建了一个cookie ,即使我没有使用Flash范围而且我已经设置了org.apache.myfaces.DISABLE_FLASH_SCOPE=true.

我该如何删除oam.Flash.RENDERMAP.TOKENcookie?这是WebSphere特定的问题

websphere myfaces jsf-2 flash-scope

4
推荐指数
2
解决办法
3628
查看次数