如何在 JSF 页面中通过 EL 将数据放入视图范围

2023-12-13

在我的 JSF 页面中,这是有效的:

${requestScope.put('test', 'data')}
${requestScope.get('test')}

这会导致异常:

${viewScope.put('test', 'data')}
${viewScope.get('test')}

例外:

java.lang.NullPointerException
    javax.el.BeanELResolver.invoke(BeanELResolver.java:159)
    javax.el.CompositeELResolver.invoke(CompositeELResolver.java:84)
    org.apache.el.parser.AstValue.getValue(AstValue.java:157)
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
    com.sun.faces.facelets.el.ELText$ELTextVariable.writeText(ELText.java:238)
    com.sun.faces.facelets.el.ELText$ELTextComposite.writeText(ELText.java:154)
    com.sun.faces.facelets.compiler.TextInstruction.write(TextInstruction.java:85)
    com.sun.faces.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:82)
    com.sun.faces.facelets.compiler.UILeaf.encodeAll(UILeaf.java:183)
    javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
    javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
    com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:456)
    com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133)
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

除此以外我该如何使用requestScope在 JSF 页面上?我当然可以有一个视图作用域 bean,但我想我可以直接使用作用域变量。我有 Tomcat 8.0.21 和 Mojarra 2.2.10。


这不是将 Facelets 模板中的数据放入特定范围的正确方法。

你应该使用<c:set>为了这。

将数据放入请求范围:

<c:set var="test" value="data" scope="request" />
..
#{test}

将数据放入视图范围:

<c:set var="test" value="data" scope="view" />
..
#{test}

The scope属性也支持session and application.

将数据放入闪光范围做法有点不同:

<c:set target="#{flash}" property="test" value="data" />
...
#{flash.test}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 JSF 页面中通过 EL 将数据放入视图范围 的相关文章

随机推荐