我已经在Tomcat 7.0.42 + jdk1.6.0_27系统上将Mojarra 2.2.5更新为2.2.6,并且在启动时,我遇到了folloging错误(...即使应用程序启动并正常工作):
SEVERE: Unable to find the encoded key.
javax.naming.NameNotFoundException: Name [jsf/ClientSideSecretKey] is not bound in this Context. Unable to find [jsf].
at org.apache.naming.NamingContext.lookup(NamingContext.java:820)
at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
at org.apache.naming.NamingContext.lookup(NamingContext.java:168)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:158)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.sun.faces.renderkit.ByteArrayGuard.setupKeyAndMac(ByteArrayGuard.java:214)
at com.sun.faces.renderkit.ByteArrayGuard.<init>(ByteArrayGuard.java:89)
at com.sun.faces.renderkit.ClientSideStateHelper.init(ClientSideStateHelper.java:476)
at com.sun.faces.renderkit.ClientSideStateHelper.<init>(ClientSideStateHelper.java:150)
at com.sun.faces.renderkit.ResponseStateManagerImpl.<init>(ResponseStateManagerImpl.java:68)
at com.sun.faces.renderkit.RenderKitImpl.<init>(RenderKitImpl.java:121)
at com.sun.faces.renderkit.RenderKitFactoryImpl.<init>(RenderKitFactoryImpl.java:79)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.java:721)
at javax.faces.FactoryFinder.getImplementationInstance(FactoryFinder.java:553)
at javax.faces.FactoryFinder.access$500(FactoryFinder.java:140)
at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:1120)
at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:379)
at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:328) …Run Code Online (Sandbox Code Playgroud) 我有一个包含以下代码的 JSF 页面:
...
<f:event type="preRenderView" listener="#{page1.PreRenderViewEvent}"/>
...
Run Code Online (Sandbox Code Playgroud)
现在我需要在页面中而不是在Page1 类构造函数中注册侦听器(Page1.PreRenderViewEvent 方法)......类似于:
...
UIViewRoot root = FacesContext.getCurrentInstance().getViewRoot();
root.getListenersForEventClass(javax.faces.event.PreRenderViewEvent.class).add ....
...
Run Code Online (Sandbox Code Playgroud)
我如何完成此代码?
谢谢。
我正在尝试将简单的 JSF2.2 原型从Mojarra 2.2.5(...工作正常...)迁移到MyFaces 2.2.3,但出现NullPointerException。我通常使用 Mojarra 做的是以编程方式
在容器中
包含(注入)JSF 页面。
示例包含页面(inclusion.xhtml)是:
<h:panelGroup id="container">
</h:panelGroup>
<h:form>
<h:commandButton value="Include page" action="#{inclusion.include('included.xhtml')}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)
包含的页面(included.xhtml)包含类似以下内容:
<h:outputText value="INCLUDED TEXT ..." />
Run Code Online (Sandbox Code Playgroud)
这是托管 bean:
@ManagedBean(name="inclusion")
@RequestScoped
public final class Inclusion {
public void include(String contentUrl) throws IOException{
FacesContext fc = FacesContext.getCurrentInstance();
FaceletContext f2ctx = (FaceletContext) fc.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
UIComponent uic = fc.getViewRoot().findComponent("container");
if (uic != null && f2ctx != null) {
f2ctx.includeFacelet(uic, contentUrl);
}
} …Run Code Online (Sandbox Code Playgroud)