2015-05-04 6 views
2

В моей странице JSF это работает:Как поместить данные в поле зрения объема с помощью EL в JSF страницы

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

Это вызывает исключение:

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

Exception:

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? Конечно, у меня может быть объект с видимым охватом, но я думал, что могу напрямую использовать переменные области видимости. У меня Tomcat 8.0.21 с Mojarra 2.2.10.

ответ

5

Это неправильный способ размещения данных в определенной области из шаблона Facelets.

Для этого вы должны использовать <c:set>.

Ввод данных в области действия запроса:

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

Ввод данных с точки зрения объема:

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

Атрибут scope также поддерживает session и application.

Ввод данных в Flash scope делается немного по-другому:

<c:set target="#{flash}" property="test" value="data" /> 
... 
#{flash.test} 
+0

Спасибо! Просто нужно добавить этот 'xmlns: c =" http://java.sun.com/jsp/jstl/core ". –

+2

Вы можете смело заменить 'java.sun.com' на' xmlns.jcp.org' для Java EE 7/JSF 2.2. См. Также [Обзор ядра JSTL в Facelets VDL] (https://docs.oracle.com/javaee/7/javaserverfaces/-2/vdldocs-facelets/c/tld-summary.html). – BalusC

 Смежные вопросы

  • Нет связанных вопросов^_^