【发布时间】:2014-11-07 02:53:43
【问题描述】:
尝试通过jsf commandLink动作将查询参数值,参数名称targetURL传递给后端bean方法。
当我在下面(在 param.targetURL 周围加上引号)时,文字 param.targetURL 被传递给方法:
<h:commandLink id="targetURLLink" action="#{commonTaskBean.redirectTo('param.targetURL')}" style="display:none" />
当我在下面做(没有引号包围 param.targetURL)时,
<h:commandLink id="targetURLLink" action="#{commonTaskBean.redirectTo(param.targetURL)}" style="display:none" />
我收到此错误 NullPointerException:
9/15/14 9:20:44:529 CDT] 00000039 SystemErr R java.lang.NullPointerException
[9/15/14 9:20:44:529 CDT] 00000039 SystemErr R at org.apache.el.util.ReflectionUtil.paramString(ReflectionUtil.java:315)
[9/15/14 9:20:44:529 CDT] 00000039 SystemErr R at org.apache.el.util.ReflectionUtil.getMethod(ReflectionUtil.java:234)
[9/15/14 9:20:44:529 CDT] 00000039 SystemErr R at org.apache.el.parser.AstValue.invoke(AstValue.java:255)
[9/15/14 9:20:44:529 CDT] 00000039 SystemErr R at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
[9/15/14 9:20:44:529 CDT] 00000039 SystemErr R at org.apache.myfaces.view.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:83)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr R at javax.faces.component._MethodExpressionToMethodBinding.invoke(_MethodExpressionToMethodBinding.java:88)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr R at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:100)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr R at javax.faces.component.UICommand.broadcast(UICommand.java:120)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr R at javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:973)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr R at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:275)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr R at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1285)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr R at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:711)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr R at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:34)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr R at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:171)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr R at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr R at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)
我把上面的代码改成如下:
<h:commandLink id="targetURLLink" actionListener="#{commonTaskBean.redirectTo}" style="display:none" >
<f:attribute name="targetURL" value="#{param.targetURL}" />
</h:commandLink>
但是后端 bean 得到一个空值:
String targetURL = (String) event.getComponent().getAttributes().get("targetURL");
这很奇怪,因为下面在屏幕上正确显示了 targetURL 参数的值:
<h:outputText value="#{param.targetURL}"/>
【问题讨论】:
-
通常,完整的堆栈跟踪有助于查看它是否是您自己的代码或库中的错误。通常,完整的堆栈跟踪本身也代表了整个答案(关键是我们能够用外行的方式向您解释它)。您最好不要从问题中省略堆栈跟踪,就好像它是无关紧要的装饰一样。
-
@BalusC:我更新了我的帖子以包含相关的堆栈跟踪。出于某种原因,我今天遇到了另一个错误。
-
这是 Apache EL 中的一个错误。在当前版本中,它已经修复了很长时间。您不清楚您正在使用哪个容器,并且不幸的是,堆栈跟踪中省略了暗示它的部分,但如果它是例如Tomcat,然后将其升级到最新版本。
-
谢谢巴鲁斯。我正在使用 websphere 8.0。升级 websphere 需要大量的工作和协调。有什么你知道的解决方法吗?
-
取决于是否要在显示带有表单的页面时传递参数,或者在页面中提交表单时。该代码实际上是后者,但您的问题/问题暗示了前者(不仅因为它是一种获取帖子数据的奇怪方式)。