jsf - JSF-ViewParameter 的名称可以是 EL-Expression 吗?

标签 jsf java-ee-6 el myfaces

可以写这样的东西吗?

<f:metadata>
    <f:viewParam name="#{constantsBean.viewParameterNameForIds}" value="#{displayBean.technicalId}" />
</f:metadata>

我总是收到 myfaces 错误,我认为它来自 View 参数名称中的 el 表达式。

编辑:完整的堆栈跟踪是:

java.lang.NullpointerException
at org.apache.myfaces.util.AbstractAttributeMap.get(AbstractAttributeMap.java:94)
at javax.faces.component.UIViewParameter.decode(UIViewParameter.java:78)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1176)
at javax.faces.component.UIInput.processDecodes(UIInput.java:178)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1170)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1170)
at javax.faces.component.UIViewRoot._processDecodesDefault(UIViewRoot.java:1316)
at javax.faces.component.UIViewRoot.access$400(UIViewRoot.java:75)
at javax.faces.component.UIViewRoot$ApplyRequestValuesPhaseProcessor.process(UIViewRoot.java:1379)
at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1282)
at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:718)
at org.apache.myfaces.lifecycle.ApplyRequestValuesExecutor.execute(ApplyRequestValuesExecutor.java:34)
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:171)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at org.apache.myfaces.extensions.cdi.jsf2.impl.listener.phase.CodiLifecycleWrapper.execute(CodiLifecycleWrapper.java:95)
at org.apache.myfaces.extensions.validator.core.startup.ExtValLifecycleWrapper.execute(ExtValLifecycleWrapper.java:61)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1147)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:722)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:449)
at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:125)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:92)
at gid.common.technical.filter.InboundProcessingFilter.doFilter(InboundProcessingFilter.java:46)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:192)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:89)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:919)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1016)
at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:87)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:883)
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1659)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:195)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1648)

顺便说一句。我正在使用 WebSphere 8 附带的 MyFaces、Myfaces Codi 和 ExtVal。

最佳答案

<f:viewParam> documentation关于 name 说了以下内容属性:

Name | Required | Request-Time | Type
-----+----------+--------------+-------------------------------------------------
name | true     | false        | javax.el.ValueExpression 
     |          |              | (must evaluate to java.lang.String)    

上面写着javax.el.ValueExpression ,不是java.lang.String (就像您在 id 属性上看到的那样,它确实不接受值表达式)。所以,它确实支持 EL。

我不使用 MyFaces,但我刚刚在 Mojarra 上进行了测试,它对我有用。我不确定您到底遇到了什么错误,因为您似乎出于某种原因将其视为不相关的信息,因此在您的问题中没有提及。错误消息通常包含问题的答案。如果您发布完整的错误消息,那么我们也许能够用通俗易懂的语言解释该消息,以便您能够理解该错误,从而解决方案将变得显而易见。例如,它可能有完全不同的原因,甚至可能是 MyFaces 中的错误。

关于jsf - JSF-ViewParameter 的名称可以是 EL-Expression 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10452546/

相关文章:

java - 使用 Java Restful 服务进行身份验证

javascript - p :commandButton onclick does not update/re-render on ajax request? 内的 EL 表达式

java - @ManagedBean 类内回滚失败

java - 数据映射器模式的数据一致性

dependency-injection - Java EE 6 : @Inject and Instance<T>

javascript - 在 JavaScript 中访问 Java/Servlet/JSP/JSTL/EL 变量

jsp - 未指定默认命名空间时,函数 getMessageData 必须与前缀一起使用

jsf - 尝试在构造函数中访问 @Inject bean 时出现 NullPointerException

javascript - a4j :commandButton not submitting

java - 与 JPA 的自连接关系